AndroidデバイスのGPSが有効になっているかどうかを確認する方法


回答:


456

最善の方法は次のようです:

 final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        buildAlertMessageNoGps();
    }

  private void buildAlertMessageNoGps() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                   startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                    dialog.cancel();
               }
           });
    final AlertDialog alert = builder.create();
    alert.show();
}

1
主に、GPS設定を表示するために起動することです。詳細については、github.com / marcust / HHPT / blob / master / src / org / thiesen / hhpt / ui /…を参照してください。
マーカス、

3
コードの素晴らしいスニペット。@SuppressWarningsを削除し、警告を受け取っていません...おそらくそれらは不要ですか?
スパン

30
alertメモリリークを回避するためにonDestroyでそれを却下できるように、アクティビティ全体を宣言することをお勧めします(if(alert != null) { alert.dismiss(); }
Cameron

だから私がバッテリーセービングをしている場合、これはまだ機能しますか?
Prakhar Mohan Srivastava、2015

3
@PrakharMohanSrivastavaロケーション設定が省電力になっている場合、これはfalseを返しますが、LocationManager.NETWORK_PROVIDERtrueを返します
Tim

129

Androidでは、LocationManagerを使用して、デバイスでGPSが有効になっているかどうかを簡単に確認できます。

ここにチェックする簡単なプログラムがあります。

GPSが有効かどうか:-AndroidManifest.xmlに以下のユーザー許可行をアクセス場所に追加します

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

あなたのJavaクラスファイルは

public class ExampleApp extends Activity {
    /** Called when the activity is first created. */
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
            Toast.makeText(this, "GPS is Enabled in your devide", Toast.LENGTH_SHORT).show();
        }else{
            showGPSDisabledAlertToUser();
        }
    }

    private void showGPSDisabledAlertToUser(){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?")
        .setCancelable(false)
        .setPositiveButton("Goto Settings Page To Enable GPS",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                Intent callGPSSettingIntent = new Intent(
                        android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(callGPSSettingIntent);
            }
        });
        alertDialogBuilder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                dialog.cancel();
            }
        });
        AlertDialog alert = alertDialogBuilder.create();
        alert.show();
    }
}

出力は次のようになります

ここに画像の説明を入力してください

ここに画像の説明を入力してください


1
関数を試しても何も起こりません。テストしてもエラーは出ませんでした。
Airikr

うまくいきました!:)ありがとうございましたが、回答を編集するまで投票できません:/
Airikr

3
問題ありません@Erik Edgrenあなたは解決策を得るのでとても幸せです...

@ user647826:すばらしい!うまく動作します。あなたは私の夜の保存
ADDI

1
アドバイス:メモリリークを回避alertするためにアクティビティ全体をonDestroy()if(alert != null) { alert.dismiss(); }
破棄

38

はいGPS設定はプライバシー設定であるため、プログラムで変更することはできません。プログラムからオンになっているかどうかを確認し、オンになっていない場合は処理する必要があります。GPSがオフになっていることをユーザーに通知し、必要に応じてこのような設定を使用してユーザーに設定画面を表示できます。

位置情報プロバイダーが利用可能かどうかを確認する

    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if(provider != null){
        Log.v(TAG, " Location providers: "+provider);
        //Start searching for location and update the location text when update available
        startFetchingLocation();
    }else{
        // Notify users and show settings if they want to enable GPS
    }

ユーザーがGPSを有効にする場合は、この方法で設定画面を表示できます。

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);

そして、onActivityResultで、ユーザーが有効にしたかどうかを確認できます

    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == REQUEST_CODE && resultCode == 0){
            String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
            if(provider != null){
                Log.v(TAG, " Location providers: "+provider);
                //Start searching for location and update the location text when update available. 
// Do whatever you want
                startFetchingLocation();
            }else{
                //Users did not switch on the GPS
            }
        }
    }

それはそれを行う1つの方法であり、それが役立つことを願っています。私が何か悪いことをしている場合はお知らせください。


2
こんにちは、私は同様の問題があります...「REQUEST_CODE」とは何か、それは何のためにあるのか、簡単に説明できますか?
ポエスクロルン

2
@poeschlorn Annaが以下の詳細へのリンクを投稿しました。簡単に言うと、RequestCodeを使用するstartActivityForResultと、複数のインテントで使用できます。インテントがアクティビティに戻ったら、RequestCodeをチェックして、どのインテントが返されているかを確認し、それに応じて応答します。
Farray

2
provider空の文字列を指定できます。チェックを次のように変更する必要がありました(provider != null && !provider.isEmpty())
Pawan

プロバイダーは ""である可能性があるため、intモードを使用することを検討してください= Settings.Secure.getInt(getContentResolver()、Settings.Secure.LOCATION_MODE); mode = 0の場合GPSがオフ
Levon Petrosyan

31

手順は次のとおりです。

ステップ1:バックグラウンドで実行されるサービスを作成します。

ステップ2:マニフェストファイルにも次の権限が必要です。

android.permission.ACCESS_FINE_LOCATION

ステップ3:コードを書く:

 final LocationManager manager = (LocationManager)context.getSystemService    (Context.LOCATION_SERVICE );

if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) )
  Toast.makeText(context, "GPS is disabled!", Toast.LENGTH_LONG).show(); 
else
  Toast.makeText(context, "GPS is enabled!", Toast.LENGTH_LONG).show();

ステップ4:または、単に次を使用して確認できます:

LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);

ステップ5:サービスを継続的に実行して接続を監視します。


5
GPSがオフになっていても有効になっていることを示しています。
Ivan V

15

はい、以下のコードで確認できます。

public boolean isGPSEnabled (Context mContext){
    LocationManager locationManager = (LocationManager)
                mContext.getSystemService(Context.LOCATION_SERVICE);
    return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}

9

このメソッドは、LocationManagerサービスを使用します。

ソースリンク

//Check GPS Status true/false
public static boolean checkGPSStatus(Context context){
    LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
    boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    return statusOfGPS;
};

6

GPSは、ユーザーが設定で使用することを許可した場合に使用されます。

これを明示的にオンにすることはできなくなりましたが、そうする必要はありません。これは実際にはプライバシー設定であるため、微調整する必要はありません。ユーザーが正確な座標を取得するアプリに問題がない場合は、オンになります。次に、ロケーションマネージャAPIは、可能な場合はGPSを使用します。

アプリがGPSなしでは本当に役に立たず、オフになっている場合は、インテントを使用して右側の画面で設定アプリを開き、ユーザーがアプリを有効にできるようにします。


6

このコードは、GPSステータスをチェックします

final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
    buildAlertMessageNoGps();
}

`


3

で、イベントハンドラをLocationListener実装onProviderEnabledonProviderDisabledます。を呼び出すとrequestLocationUpdates(...)、電話でGPSが無効になっている場合、onProviderDisabledが呼び出されます。ユーザーがGPSを有効にonProviderEnabledすると、が呼び出されます。


2
In Kotlin: - How to check GPS is enable or not

 val manager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            checkGPSEnable()

        } 


 private fun checkGPSEnable() {
        val dialogBuilder = AlertDialog.Builder(this)
        dialogBuilder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
                .setCancelable(false)
                .setPositiveButton("Yes", DialogInterface.OnClickListener { dialog, id
                    ->
                    startActivity(Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS))
                })
                .setNegativeButton("No", DialogInterface.OnClickListener { dialog, id ->
                    dialog.cancel()
                })
        val alert = dialogBuilder.create()
        alert.show()
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.