主要活动在第一次安装应用程序时被销毁,之后我有一个后台服务,只要有可用的互联网就会运行。
后台服务检测位置(以及其他内容),因为应用程序应该在手机上保留数月(它只适用于有互联网而不是所有时间或者更进一步耗尽电池)好吧,因为它运行了很长时间,用户可以禁用gps并忘记在下次连接到互联网之前将其重新打开,这可能导致应用程序在谷歌API客户端请求位置时崩溃,所以现在,背景当应用程序检测到gps已关闭时会自动打开设置界面,以提醒用户将其打开,但此解决方案不是那么好,因为界面无处不在,用户可能会感到困惑。
所以我想做一个提示/警告对话,告诉用户“app [appName]需要gsp请打开”,选择“是”和“否”,当用户点击“是”时,设置界面显示。这可行吗?同样,我不是在寻找一个活动的解决方案,因为我已经知道如何做到这一点(没有透明的活动,只是使用服务)
以下是我到目前为止的工作方式:
//This part of the code is right before getting the current location
if (!isLocationEnabled(this)) {
Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(myIntent);
}
public static boolean isLocationEnabled(Context context) {
int locationMode = 0;
String locationProviders;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
try {
locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
return false;
}
return locationMode != Settings.Secure.LOCATION_MODE_OFF;
} else {
locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
return !TextUtils.isEmpty(locationProviders);
}
}
答案 0 :(得分:0)
您可以在服务中实施
Location. Locationllistener
并使用覆盖方法
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); // Define a listener that responds to location updates LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { // Called when a new location is found by the network location provider. makeUseOfNewLocation(location); } public void onStatusChanged(String provider, int status, Bundle extras) {} public void onProviderEnabled(String provider) {} public void onProviderDisabled(String provider) {// here if provider is gps show notification } }; // Register the listener with the Location Manager to
在此方法中,您可以使用警报声音进行通知