1

重複の可能性:
AndroidカップケーキでGPSをプログラムで有効にする方法

私は現在、GPSで動作するAndroidでアプリを書いています。現時点では、GPSが有効になっているかどうかを確認できます。私の問題は、GPSが無効になっている場合、アプリの起動時にGPSを有効にしたいということです。これをプログラムで行うにはどうすればよいですか?また、GPSをオン/オフする関数を作成したいのですが、stackoverflowのすべてのスレッドを読みましたが、試したすべての関数で「残念ながらアプリを停止する必要があります」(許可を追加することを忘れませんでした)

誰かがGPSを有効または無効にするための機能を手伝ってくれますか?

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

最初、私はこれらの関数を使用しました:

 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);
        }
    }

それから私は使用しようとしました:

ENABLE GPS:

Intent intent=new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", true);
sendBroadcast(intent);
DISABLE GPS:

Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", false);
sendBroadcast(intent);

両方とも私のために働いていません

誰かアイデアがありますか?

4

1 に答える 1

7

プログラムでGPSのオンとオフを切り替えることはできません。あなたができる最善のことは、ユーザーが自分でそれを行うことができる設定画面にユーザーを送ることです。

final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
     new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
     startActivity(intent);
}

プログラムでGPSをオン/オフにするハックがありましたが、それらは古いバージョンのAndroidでのみ機能します。できたとしても、これをしないでください。アプリがGPSを正確に追跡できるようにしたくないため、ユーザーがGPSをオフにした可能性があります。彼らの決定を強制的に変えようとするのは非常に悪い形です。

GPSを有効にする必要がある場合は、アプリの起動時にGPSを確認し、ユーザーがGPSを有効にしない場合は保釈します。

于 2012-09-14T20:58:13.967 に答える