2017-03-08 30 views
0

我想在我的应用程序中访问gps服务。因此,我在按钮的onClick()方法内使用了Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);。调用Intent后,我启动服务以侦听位置更新。在onResume方法中,我检查gps服务。如果它被禁用,我停止服务。但是,当显示位置设置并且在用户打开gps之前服务最终停止时,会调用onResume方法。Android 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); 
     } 
    } 
} 
+0

在哪个回调的活动中,你是否启动了gps s ervice? – Yashasvi

+0

我在按钮的onClick方法中启动它。 – jobin

+0

我的问题类似于http://stackoverflow.com/questions/25616956/which-activity-life-cycle-gets-called-when-app-redirect-to-settings – jobin

回答

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

要处理结果,你需要重写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); 
       } 
      } 
     } 
    } 

希望它会为工作你

+0

我之前尝试过使用onActivityResult,但在设置打开时调用它 – jobin

+0

您可能在android:launchMode =“singleTop”的Manifest中声明了Activity。尝试更改它与android:launchMode =“标准”,并检查 –

+0

您从哪个活动启动设置意图 –