public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().matches("Android.location.PROVIDERS_CHANGED")) {
Toast.makeText(context, "in Android.location.PROVIDERS_CHANGED",
Toast.LENGTH_SHORT).show();
Intent pushIntent = new Intent(context, LocalService.class);
context.startService(pushIntent);
} else {
Toast.makeText(context, "not in Android.location.PROVIDERS_CHANGED",
Toast.LENGTH_SHORT).show();
Intent pushIntent = new Intent(context, LocalService.class);
context.startService(pushIntent);
}
}
@Override
public void onLocationChanged(Location arg0) {
}
}
私のアプリでは、GPSがオン/オフになったときにブロードキャストレシーバーをトリガーする必要があります。問題を調査し、アプリに実装するのに最適なものを提案します。
これは、ユーザーがオン/オフの場所をオンにするときにアクションをトリガーする場合に役立ちます
マニフェストにこのアクションを追加する必要があります
<action Android:name="Android.location.PROVIDERS_CHANGED" />
このアクションを追加した後、ブロードキャストレシーバーをトリガーできます
<receiver Android:name=".GpsLocationReceiver">
<intent-filter>
<action Android:name="Android.location.PROVIDERS_CHANGED" />
<category Android:name="Android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
そして、あなたのBroadcastReceiver
クラスでは、以下で与えられるそのクラスにLocationListener
を実装する必要があります。
public class GpsLocationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().matches("Android.location.PROVIDERS_CHANGED")) {
Toast.makeText(context, "in Android.location.PROVIDERS_CHANGED",
Toast.LENGTH_SHORT).show();
Intent pushIntent = new Intent(context, LocalService.class);
context.startService(pushIntent);
}
}
}
@ Deepak Guptaanswer を追加します。あなたのfragmentまたはactivityGPSステータスが変更されたとき。
アクティビティまたはフラグメントにブロードキャストレシーバーを以下のように登録します。
private BroadcastReceiver gpsReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().matches(LocationManager.PROVIDERS_CHANGED_ACTION)) {
//Do your stuff on GPS status change
}
}
};
fragmentの場合:
getContext().registerReceiver(gpsReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));
activityの場合:
registerReceiver(gpsReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));
これは、アクティビティまたはフラグメントの内部だけでなく、コンテキストにアクセスできる任意の場所で使用できます。私はそれが助けてくれることを願っています。
ユーザー@DanielNugentが指摘したように、このコードを試すことができます。
ContentResolver contentResolver = getContext().getContentResolver();
// Find out what the settings say about which providers are enabled
int mode = Settings.Secure.getInt(
contentResolver, Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
if (mode != Settings.Secure.LOCATION_MODE_OFF) {
if (mode == Settings.Secure.LOCATION_MODE_HIGH_ACCURACY) {
locationMode = "High accuracy. Uses GPS, Wi-Fi, and mobile networks to determine location";
} else if (mode == Settings.Secure.LOCATION_MODE_SENSORS_ONLY) {
locationMode = "Device only. Uses GPS to determine location";
} else if (mode == Settings.Secure.LOCATION_MODE_BATTERY_SAVING) {
locationMode = "Battery saving. Uses Wi-Fi and mobile networks to determine location";
}
}
Android Androidでロケーションモードが導入された後の有効なソリューション
より正確な位置情報モードで確認できます
private boolean isGpsEnabled(Context context) {
ContentResolver contentResolver = getContext().getContentResolver();
// Find out what the settings say about which providers are enabled
// String locationMode = "Settings.Secure.LOCATION_MODE_OFF";
int mode = Settings.Secure.getInt(
contentResolver, Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
if (mode != Settings.Secure.LOCATION_MODE_OFF) {
return true;
/* if (mode == Settings.Secure.LOCATION_MODE_HIGH_ACCURACY) {
locationMode = "High accuracy. Uses GPS, Wi-Fi, and mobile networks to determine location";
} else if (mode == Settings.Secure.LOCATION_MODE_SENSORS_ONLY) {
locationMode = "Device only. Uses GPS to determine location";
} else if (mode == Settings.Secure.LOCATION_MODE_BATTERY_SAVING) {
locationMode = "Battery saving. Uses Wi-Fi and mobile networks to determine location";
}*/
} else {
return false;
}
}