2016-09-30 6 views
1

私はナビゲーションドロワーを持っています。ナビゲーション・ドロワーで私は断片を膨らませています。最初の断片では、ユーザーにランタイムのアクセス許可を求める。 2番目の断片では、同じアクセス権を再度要求します。私の場合、最初の断片は許可を求める。 2番目の断片では、許可を求めることはありません。誰が問題を教えてくれますか?両方の状況で同じコードを使用しているからです。アンドロイドの異なる場所で同じ実行時アクセス許可を求めることはできますか?

これが私の最初のフラグメントのコードである: -

if (checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, getActivity().getApplicationContext(), getActivity())) { 

        IsConsumed = 1; 
        fetchLocationData(); 
       } else { 

        requestPermission(Manifest.permission.ACCESS_FINE_LOCATION, PERMISSION_REQUEST_CODE_LOCATION, getActivity().getApplicationContext(), getActivity()); 
       } 


public void requestPermission(String strPermission, int perCode, Context _c, Activity _a) { 

     if (ActivityCompat.shouldShowRequestPermissionRationale(_a, strPermission)) { 


      Toast.makeText(getActivity(), "GPS permission allows us to access location data. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show(); 
     } else { 

      ActivityCompat.requestPermissions(_a, new String[]{strPermission}, perCode); 
     } 
    } 


    public static boolean checkPermission(String strPermission, Context _c, Activity _a) { 
     int result = ContextCompat.checkSelfPermission(_c, strPermission); 
     if (result == PackageManager.PERMISSION_GRANTED) { 

      return true; 

     } else { 

      return false; 

     } 
    } 
@Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch (requestCode) { 

      case PERMISSION_REQUEST_CODE_LOCATION: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

        fetchLocationData(); 

       } else { 

        Toast.makeText(getActivity(), "Permission Denied, You cannot access location data.", Toast.LENGTH_LONG).show(); 

       } 
       break; 

     } 
    } 

私は2番目のフラグメントで同じコードを使用しています。それは許可を求めるものではありません。私はそれがif()条件に入るログを印刷しようとしました。ログを出力します。しかし、許可を求めることはありません。

+2

おそらく、最初の許可は、他のフラグメントでは発生しないという理由で許可されました。 – Enzokie

+0

@Enzokie no!私が許可を拒否した後は、もう一度尋ねることはありません。 – aarav

+0

ちょっと@aaravさんがあなたの問題を解決した答えはありましたか? –

答えて

0
public static boolean checkPermission(String strPermission, Context _c, Activity _a) { 
    int result = ContextCompat.checkSelfPermission(_c, strPermission); 
    if (result == PackageManager.PERMISSION_GRANTED) { 

     return true; 

    } else { 
     // user allowed permission. we should not ask for permission.  
     return false; 

    } 
} 

これは、ユーザーが許可を与えているかどうかをチェックする機能です。

最初のフラグメントでは、ユーザがこの許可を許可した場合、セクションのコードが実行されます。

あなたが再び許可を求めるためにをブロックし、他のあなたのrequestPermission関数を呼び出すことができますそして、あなたが許可を処理するには、以下の関数を呼び出して拒否

public static boolean checkPermission(String strPermission, Context _c, Activity _a) { 
    int result = ContextCompat.checkSelfPermission(_c, strPermission); 
    if (result == PackageManager.PERMISSION_GRANTED) { 

     return true; 

    } else { 
     requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
          1); 
     return false; 

    } 
} 

(もう一度同じ権限を依頼することはお勧めしません)クリック数:

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case 1: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission was granted, yay! Do the 
       // contacts-related task you need to do. 
       //Called when Allowed 
      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
       //Called when denied 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 
関連する問題