一般申请权限都是在启动页或者主页面,比如之前我写的一篇文章:
但是都是在Activity 里申请的,今天闲着无事,在Fragment 里申请 发现了一点问题。
首先添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
申请SD卡权限(Fragment)
if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.CALL_PHONE},0);
}
回调:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.e(TAG,"requestCode===="+requestCode);
switch (requestCode)
{
case 0:
if(grantResults[0]==PackageManager.PERMISSION_GRANTED)
{
Log.e(TAG,"你申请了SD卡权限");
Toast.makeText(getActivity(),"你申请了SD卡权限",Toast.LENGTH_LONG).show();
}
break;
}
}
代码运行,权限申请倒是成功了,但是没用回调!这是怎么回事呢?原来在Fragment 中 申请权限要这样写:
if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},0);
}
运行起来:Log
11-18 09:33:28.705 16497-16497/com.example.auser.androidcode E/PermissionFragment: requestCode====0
你申请了SD卡权限
这样就Ok了。