提示用户在后台服务中激活gps?

时间:2017-04-04 17:30:03

标签: android geolocation gps android-alertdialog android-permissions

主要活动在第一次安装应用程序时被销毁,之后我有一个后台服务,只要有可用的互联网就会运行。

后台服务检测位置(以及其他内容),因为应用程序应该在手机上保留数月(它只适用于有互联网而不是所有时间或者更进一步耗尽电池)好吧,因为它运行了很长时间,用户可以禁用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);
        }


    }

1 个答案:

答案 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 

在此方法中,您可以使用警报声音进行通知