1

私はGoogleの位置情報APIを使って地図上のユーザーの位置を表示しています。Marshmallow - Googleマップランタイムアクセス許可の問題

初めてアプリケーションを読み込むと、ユーザーが場所へのアクセスを有効にする必要がある理由を説明する根拠ダイアログが表示されます。次に、runtime permission dialogが表示され、ユーザーが「を許可する」をクリックすると、ロケーションへのアクセスが有効になります。マップはクラッシュすることなく正常にロードされます。

ただし、アプリが再開すると(の背景に移動した場合はになります)、ユーザーが既に位置情報アクセスを許可しているため、理由のダイアログは表示されません。このシナリオでは、runtime permission dialogのみが表示されます。ユーザーが "Deny"をクリックすると、アプリがクラッシュします。このコードは、この段階で実行時例外を処理する方法はありますM(ロリポップ、Jellybeanなどキットカット)

下記のAndroidのバージョンでは正常に動作しますか?

エラーは次のとおりです。

java.lang.SecurityException:クライアントはPRIORITY_HIGH_ACCURACYの場所を要求するACCESS_FINE_LOCATION 権限を持っている必要があります。

私は、任意のサードパーティのライブラリなしで標準サンプルMyLocationのデモアプリケーションを使用しています:

GoogleMaps MapDemo on Github

私もPermissionsDispatcherライブラリを使用してみましたが、同じエラーが持続します。

PermissionDispatcher Android-Google-Maps-Demo

private void enableMyLocation() { 
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
      != PackageManager.PERMISSION_GRANTED) { 
     // Permission to access the location is missing. 
     PermissionUtils.requestPermission(this, LOCATION_PERMISSION_REQUEST_CODE, 
       Manifest.permission.ACCESS_FINE_LOCATION, true); 
    } else if (mMap != null) { 
     // Access to the location has been granted to the app. 
     mMap.setMyLocationEnabled(true); 
    } 
} 

すべてのヘルプは高く評価されています。

+0

ポスト:

ここ
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted, yay! Do the task you need to do. } else { // permission denied, boo! Disable the functionality that depends on this permission. } return; } } } 

が関連SOチケットです:

// Assume thisActivity is the current activity int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ACCESS_FINE_LOCATION); How to request the permissions you need : if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION); // MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION is an // app-defined int constant. The callback method gets the // result of the request. } } 

がどのように要求の結果にアクセスするには:あなたが権限を持っているかどうかを確認する方法

あなたが許可を要求するコード –

+0

許可を受け入れる/拒否するという実装は、あなたがrのコードは正常に動作します。これらのケースで書いたコードに依存します。 onCreate()を投稿し、アクセス許可のコールバックメソッドをリクエストしてください。 –

+0

私は[リンク](https://github.com/googlemaps/android-samples/blob/master/ApiDemos/app/src/main/java/com/example/mapdemo/MyLocationDemoActivity)に記載されている正確な例を使用しています。 java) – Akshata

答えて

0

はあなたが尋ねると、正確に

を必要とし、コードに問題がある可能性がありされているものを許可についてのあなたのマニフェストファイルに書込み権限を追加したことについて確認してください。 このライブラリを試す:RuntimePermission Library 手動で許可を求めるには

0

Android 6.0(APIレベル23)以降、アプリをインストールするときではなく、アプリが実行されている間にアプリにgrant permissionsというユーザーが表示されます。このアプローチは、ユーザーがアプリのインストールや更新時に権限を与える必要がないため、アプリのインストールプロセスを合理化します。また、ユーザーにアプリの機能をより詳細に制御することもできます。Google Maps API Android v2 - "ACCESS_FINE_LOCATION" permission required with my-location layer enabled