当活动不可见时调用Android onResume方法

时间:2017-03-08 10:17:26

标签: android android-activity onresume

我想在我的应用程序中访问gps服务。所以我在按钮的Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);方法中使用了onClick()。在调用Intent之后,我启动服务来监听位置更新。 onResume方法我检查gps服务。如果它被禁用,我停止服务。但是当显示位置设置并且甚至在用户打开gps之前服务最终停止时调用onResume方法。

代码:

     Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     startActivity(i);
     gps_intent=new Intent(AddOffers.this, StatsGpsService.class);
     gps_intent.putExtra("offr_act_ind",true);
     startService(gps_intent);



 @Override
     protected void onResume() {
     super.onResume();
     LocationManager locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
     boolean isproviderenabled=locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    if(isproviderenabled==false){
        if(gps_intent!=null){
            Log.e("g","g");
        stopService(gps_intent);
    }}

StatsGpsService.java:

public class StatsGpsService extends Service {
    LocationListener locationListener;
    LocationManager locationManager;
    boolean flag1;

    public StatsGpsService() {
        super();

    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.e("Service","Created");


    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        handleLocation(intent);
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.e("Service","Destroyed");
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    public void handleLocation(Intent intent){
        if(intent!= null) {
            flag1 = intent.getBooleanExtra("offr_act_ind", false);

            locationListener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    if (flag1 == true) {

                        Intent intent = new Intent("loc_updts");
                        intent.putExtra("stat_lat", location.getLatitude());
                        intent.putExtra("stat_longt", location.getLongitude());
                        sendBroadcast(intent);
                    }
                }

                @Override
                public void onStatusChanged(String s, int i, Bundle bundle) {

                }

                @Override
                public void onProviderEnabled(String s) {

                }

                @Override
                public void onProviderDisabled(String s) {
                    Log.e("Provider","Disabled");

                }
            };
            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);


            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }

            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

请勿在onResume上查看GPS状态。 使用startActivityForResult打开“设置”。

并检查onActivityResult上的Gps状态

要打开设置,请使用以下代码

Intent SettingIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
SettingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(SettingIntent,Utils.SETTING_INTENT_REQUESTCODE// any int code you can use);

要处理结果,您需要覆盖Activity的onActivityResult方法

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Utils.SETTING_INTENT_REQUESTCODE// this should be same int that you passed to start acitivity) {
            LocationManager locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
            boolean isproviderenabled=locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
            if(isproviderenabled==false){
                if(gps_intent!=null){
                    Log.e("g","g");
                    stopService(gps_intent);
                }
            }
        }
    }

希望它对您有用