2017-03-08 9 views
0

私はアプリケーション内のgpsサービスにアクセスしたいと思います.ボタンのメソッド内でIntent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);を使用しました。インテントを呼び出した後、サービスを開始して位置更新を待ちます。 onResumeメソッドではgpsサービスをチェックします。無効にするとサービスが停止しますが、onResumeメソッドはLocation Settingsが表示され、gpsをオンにする前にサービスが最終的に停止したときに呼び出されます。アクティビティが表示されていないときに呼び出される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を開始していますか? 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を使用して設定を開きます。

そして、あなたは

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

はそれがために働くことを願っています活動

の方法をonActivityResultオーバーライドする必要が引き起こす処理するコード

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

上のGPSのステータスを確認しますあなた

+0

私は以前にonActivityResultを使ってみましたが、設定が開いているときに呼び出されました – jobin

+0

あなたはandroid:launchMode = "singleTop"でマニフェストで宣言されたアクティビティを持つかもしれません。 android:launchMode = "standard"で変更しようとしてください。 –

+0

開始するアクティビティ設定インテント –

関連する問題