1. ホーム
  2. android

[解決済み] AndroidでプログラムによりGPSを有効または無効にするにはどうすればよいですか?

2022-04-23 06:19:42

質問

アンドロイドでプログラム的にGPSをON/OFFすることについての質問ですが があります。 されている 議論 たくさん そして、その答えはいつも同じです。

位置情報設定画面に転送して、ユーザーが有効化/無効化できるようにする必要があります。

それはわかるのですが、最近買った タスカー このアプリケーションでは、あらかじめ設定したアプリケーションに入るとGPSが自動的に有効になり、終了すると無効になるようにルールを設定することができます ( こちら このアプリは、多くのアンドロイドバージョンと異なるデバイスで動作するため、ファームウェア署名キーで署名することができず、ルート化も必要ありません。

自分のアプリでやってみたい。もちろん、ユーザーのプライバシーを吹き飛ばしたくないので、まず、典型的な "remember my decision" チェックボックスで自動的にオンにするかどうかをユーザーに尋ね、イエスと答えたら、有効にすることにします。

どなたか、Taskerがどのようにこれを実現しているか、アイデアや手がかりをお持ちの方はいらっしゃいますか?

どのように解決するのですか?

GPSの切り替えは 搾取 パワーマネージャのウィジェットのバグです。 xdaスレッド をご覧ください。

私が使っているコードの例です。

private void turnGPSOn(){
    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

    if(!provider.contains("gps")){ //if gps is disabled
        final Intent poke = new Intent();
        poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
        poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
        poke.setData(Uri.parse("3")); 
        sendBroadcast(poke);
    }
}

private void turnGPSOff(){
    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

    if(provider.contains("gps")){ //if gps is enabled
        final Intent poke = new Intent();
        poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
        poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
        poke.setData(Uri.parse("3")); 
        sendBroadcast(poke);
    }
}

を使用して、既存の電源制御ウィジェットのバージョンが、gpsを切り替えられるものであるかどうかをテストしてください。

private boolean canToggleGPS() {
    PackageManager pacman = getPackageManager();
    PackageInfo pacInfo = null;

    try {
        pacInfo = pacman.getPackageInfo("com.android.settings", PackageManager.GET_RECEIVERS);
    } catch (NameNotFoundException e) {
        return false; //package not found
    }

    if(pacInfo != null){
        for(ActivityInfo actInfo : pacInfo.receivers){
            //test if recevier is exported. if so, we can toggle GPS.
            if(actInfo.name.equals("com.android.settings.widget.SettingsAppWidgetProvider") && actInfo.exported){
                return true;
            }
        }
    }

    return false; //default
}