2016-11-23 99 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。 –