簡體   English   中英

活動不可見時調用的Android onResume方法

[英]Android onResume method called when activity is not visible

我想在我的應用程序中訪問gps服務。因此我使用了Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 在按鈕的onClick()方法中。調用Intent后,我啟動服務以偵聽位置更新。在onResume方法中,我檢查gps服務。如果已禁用,則停止服務。但是onResume方法被調用當顯示“位置設置”並且服務最終在用戶可以打開gps之前停止時。

碼:

     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);
        }
    }
}

不要在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);
                }
            }
        }
    }

希望它對你有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM