2016-08-15 26 views
8

私は実行時の許可要求を使用していますが、問題があります。コールバックメソッドonRequestPermissionsResultが無限に呼び出されたようです。ユーザーがリクエストを拒否すると、アプリケーションは応答しなくなります。onRequestPermissionsResultが無限に呼び出されます

ユーザーが「拒否」をクリックするたびに、許可ダイアログが再び表示されます。 「再度尋ねないでください」をクリックするだけで、再度表示されません。 * '許可'を押すと問題なく正常に動作します。

一度に呼び出すメソッドをキャンセルする方法はありますか?

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) 
{ 
    ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.ACCESS_FINE_LOCATION }, LOCATION_PERMISSION_CUSTOM_REQUEST_CODE); 
} 


@Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch(requestCode) 
     { 
      case LOCATION_PERMISSION_CUSTOM_REQUEST_CODE: 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        // permission was granted 
        MyManager.connect(); 
        return; 
       } else { 
        // permission denied 
        return; 
       } 
      default: 
       return; 
     } 
    } 
+0

コードを投稿してください –

+0

@GilMoshayofが投稿を編集しました)thanks – BVtp

+0

MyManager.connect()で何が起こりますか? –

答えて

12

ここでの問題、あなたはコメントで述べたように、要求許可ダイアログをトリガーコードがonResumeメソッドで呼び出されていることです。

要求ダイアログのアクセス許可が終了すると、ランタイムは、ダイアログをテーマにしたアクティビティと同じように、起動されたアクティビティに対してonResumeを呼び出します。

あなたのケースでは、許可を拒否するとonResumeへの呼び出しが再度トリガーされ、ダイアログが再び表示され、無限のサイクルが発生します。

この許可要求をonCreateに移動するなどの方法で問題を解決できます。

+3

説明のポイント:「どんなダイアログと同じように」 - ダイアログにも当てはまります - その活動。 'Dialog'はアクティビティのライフサイクルに影響を与えないので、 'Dialog'には当てはまりません。この場合、実行時アクセス許可ダイアログはダイアログをテーマにしたアクティビティです。 – CommonsWare

+0

ありがとう!答えを編集しました。 –

関連する問題