7

に有効/場所へのアクセスを無効に聞く - >「場所サービス」を、使用することができ、「私の場所にアクセス」という名前のトグルボタンがあります&を無効にすると、アプリからの位置情報アクセスが有効になります。「<strong>設定</strong>」で、AndroidのOSで設定

現在、私は位置情報サービスアプリケーションを開発中です。私は、私のAndroidプロジェクトでどのようにこの設定を聞くことができますか?ユーザーが「私の場所へのアクセスアクセスを無効または有効にするとすぐに知るために使用できる放送受信機はありますか?

ブロードキャストレシーバーがない場合、Androidプロジェクトでこの変更をどのように聞くことができますか?両方

<receiver 
     android:name="com.eegeo.location.LocationProviderChangedReceiver"> 
     <intent-filter> 
      <action android:name="android.location.PROVIDERS_CHANGED" /> 
     </intent-filter> 
    </receiver> 

チェック:

は、マニフェストファイルに受信者を追加します:位置情報サービスは、これが私の作品

LocationManager lm = null; 
boolean gps_enabled,network_enabled; 
    if(lm==null) 
     lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    try{ 
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    }catch(Exception ex){} 
    try{ 
    network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
    }catch(Exception ex){} 

    if(!gps_enabled && !network_enabled){ 
     dialog = new AlertDialog.Builder(context); 
     dialog.setMessage(context.getResources().getString(R.string.gps_network_not_enabled)); 
     dialog.setPositiveButton(context.getResources().getString(R.string.open_location_settings), new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
       // TODO Auto-generated method stub 
       Intent myIntent = new Intent(Settings.ACTION_SECURITY_SETTINGS); 
       context.startActivity(myIntent); 
       //get gps 
      } 
     }); 
     dialog.setNegativeButton(context.getString(R.string.Cancel), new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     dialog.show(); 

    } 
+1

GrlsHu @、いいえ、私はそれを行うにはしたくありません。私の質問のポイントは、この場所のアクセス設定を聞く方法です。 – Mellon

+0

http://stackoverflow.com/a/20673766/1994950とhttp://stackoverflow.com/a/23756293/1994950は役に立ちます – Kushal

答えて

0

かを確認するために、次のコードを使用することができます受取人のロケーションプロバイダ:

public class LocationProviderChangedReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     boolean anyLocationProv = false; 
     LocationManager locationManager = (LocationManager) MyMainActivity.context.getSystemService(Context.LOCATION_SERVICE); 

     anyLocationProv |= locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     anyLocationProv |= locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     Log.i("", "Location service status" + anyLocationProv); 


    } 

} 

このレシーバは明白な理由により2回以上呼び出されていますが、これによりステータスが通知されます。

+2

こんにちは、私の質問は値をチェックする方法ではなく、どのように耳を傾けるかについてですこの変更は、コード内の通知を取得して、ユーザーがこの場所のアクセスを設定で変更した後、変更された値を取得する方法を意味します。 – Mellon

+0

@GrIsHuこれは間違っています。あなたはusmanの解決策を以下に試しましたか? –

5

を有効にするかどうか

+1

マニフェストブロードキャストレシーバーは、アプリがバックグラウンドで位置情報を必要とする場合にのみ使用する必要があります。それ以外の場合は実行時ブロードキャスト受信機を使用する必要があります –

1

この方法ではるかに簡単に行うことができます。あなたのBroadcastReceiverのonReceive()方法で:

ContentResolver contentResolver = getContext().getContentResolver(); 
    // Find out what the settings say about which providers are enabled 
    int mode = Settings.Secure.getInt(
      contentResolver, Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); 

    if (mode == Settings.Secure.LOCATION_MODE_OFF) { 
     // Location is turned OFF! 
    } else { 
     // Location is turned ON! 
    } 

〜このコードのおかげ:LocationManagerTest.java

関連する問題