2016-11-23 97 views
11

我想檢查片段中的權限。如何檢查片段中的權限

我的代碼:

 // Here, thisActivity is the current activity 
     if (ContextCompat.checkSelfPermission(getActivity(), 
       Manifest.permission.ACCESS_FINE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED) { 


      // Should we show an explanation? 
      if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), 
        android.Manifest.permission.ACCESS_FINE_LOCATION)) { 

       // Show an explanation to the user *asynchronously* -- don't block 
       // this thread waiting for the user's response! After the user 
       // sees the explanation, try again to request the permission. 

      } else { 

       // No explanation needed, we can request the permission. 

       ActivityCompat.requestPermissions(getActivity(), 
         new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 
         1); 



       // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
       // app-defined int constant. The callback method gets the 
       // result of the request. 
      } 
     } 

onRequestPermissionsResult不叫後允許或拒絕。

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case 1: { 
      Log.e("test","0"); 
      // 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. 
       //yes 

       Log.e("test","1"); 

       Intent intent = new Intent(getActivity(), MapsActivity.class); 
       intent.putExtra("latitude", 35.694828); 
       intent.putExtra("longitude", 51.378129); 
       startActivity(intent); 

      } else { 
       utilityFunctions.showSweetAlertWarning(getActivity(),r.getString(R.string.str_warning_title_empty), 
         r.getString(R.string.str_you_must_allow_this_permission_toast), 
         r.getString(R.string.str_warning_btn_login)); 

       Log.e("test","2"); 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 
+0

的可能的複製[從v4.Fragment請求運行的權限,並有回調到片段?](HTTP:/ /stackoverflow.com/questions/32890702/request-runtime-permissions-from-v4-fragment-and-have-callback-go-to-fragment) –

回答

14

我已經做了以下檢查片段中的權限。

if (ActivityCompat.checkSelfPermission(getContext(), 
      android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && 
      ActivityCompat.checkSelfPermission(getContext(), 
        android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(getActivity(), 
       new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION, 
         android.Manifest.permission.ACCESS_FINE_LOCATION}, 
       REQUEST_LOCATION); 
    } else { 
     Log.e("DB", "PERMISSION GRANTED"); 
    } 
+0

如果用戶尚未授予權限,我們仍然需要徵求權限。 –

-2

請參閱本Link它給你完整的指南,以處理運行時權限。即使獲得布爾值來檢查權限是否被允許或不是,就像你想要的一樣。

+0

該鏈接討論請求活動的許可 –

3

onRequestPermissionsResult在活動中被調用而不是片段。改爲在活動中覆蓋onRequestPermissionsResult

9

片段有requestPermissions()onRequestPermissionsResult()方法,使用它。 (不需要Activity,僅需Context)。

if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
    requestPermissions(//Method of Fragment 
     new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
     REQUEST_PERMISSIONS_CODE_WRITE_STORAGE 
    ); 
} else { 
    downloadImage(); 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    if (requestCode == REQUEST_PERMISSIONS_CODE_WRITE_STORAGE) { 
     if (permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      proceedWithSdCard(); 
     } 
    } 
} 
+0

片段requestPermissions需要Android M,但它在FragmentCompat中可用。 –

27

這就是我的做法,它適用於我。謝謝!

的活動:

ActivityCompat.requestPermissions(this, permissionsList, REQUEST_CODE); 

對於片段:

requestPermissions(permissionsList, REQUEST_CODE); 
+0

片段requestPermissions需要Android M,但它可用於舊版API的FragmentCompat。 –