回答:
最善の方法は次のようです:
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();
}
alert
メモリリークを回避するためにonDestroyでそれを却下できるように、アクティビティ全体を宣言することをお勧めします(if(alert != null) { alert.dismiss(); }
)
LocationManager.NETWORK_PROVIDER
trueを返します
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();
}
}
出力は次のようになります
alert
するためにアクティビティ全体をonDestroy()
if(alert != null) { alert.dismiss(); }
はい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つの方法であり、それが役立つことを願っています。私が何か悪いことをしている場合はお知らせください。
startActivityForResult
と、複数のインテントで使用できます。インテントがアクティビティに戻ったら、RequestCodeをチェックして、どのインテントが返されているかを確認し、それに応じて応答します。
provider
空の文字列を指定できます。チェックを次のように変更する必要がありました(provider != null && !provider.isEmpty())
手順は次のとおりです。
ステップ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:サービスを継続的に実行して接続を監視します。
このメソッドは、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;
};
GPSは、ユーザーが設定で使用することを許可した場合に使用されます。
これを明示的にオンにすることはできなくなりましたが、そうする必要はありません。これは実際にはプライバシー設定であるため、微調整する必要はありません。ユーザーが正確な座標を取得するアプリに問題がない場合は、オンになります。次に、ロケーションマネージャAPIは、可能な場合はGPSを使用します。
アプリがGPSなしでは本当に役に立たず、オフになっている場合は、インテントを使用して右側の画面で設定アプリを開き、ユーザーがアプリを有効にできるようにします。
で、イベントハンドラをLocationListener
実装onProviderEnabled
しonProviderDisabled
ます。を呼び出すとrequestLocationUpdates(...)
、電話でGPSが無効になっている場合、onProviderDisabled
が呼び出されます。ユーザーがGPSを有効にonProviderEnabled
すると、が呼び出されます。
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()
}