onRequestPermissionsResult 在片段中不起作用
Posted
技术标签:
【中文标题】onRequestPermissionsResult 在片段中不起作用【英文标题】:onRequestPermissionsResult not working in fragment 【发布时间】:2017-10-15 10:15:31 【问题描述】:我正在尝试实现 Marshmallow 的权限支持,但我在“onRequestPermissionsResult”中的代码从未被调用。
在 Activity 中工作时,它在工作,但在片段中我遇到了问题,即控件没有进入 onRequestPermissionsResult()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
mCheckPermission();
在 mCheckPermission() 中:-
public void mCheckPermission()
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
requestPermissions(new String[]Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION,
PERMISSION_REQUEST_COARSE_LOCATION );
对话框弹出两个按钮。拒绝和允许。 当点击按钮时,控件没有进入 onRequestPermissionCheck();
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
case PERMISSION_REQUEST_COARSE_LOCATION:
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED)
Toast.makeText(getActivity(), "permission granted", Toast.LENGTH_LONG).show();
//call your action
else
Toast.makeText(getActivity(), "permission denied", Toast.LENGTH_LONG).show();
break;
【问题讨论】:
参考***.com/questions/35989288/… 我已经调用了 requestpermissions() 而我没有调用 ActivityCompat.requestpermission(); 1.如果您覆盖了活动的onRequestPermissionsResult
,则将其称为super.onRequestPermissionsResult
。 2.尝试去掉fragment的super.onRequestPermissionsResult(requestCode, permissions, grantResults);
或者直接放到函数末尾。
【参考方案1】:
您需要使用support.v4.app.fragment
requestPermission,而不是使用requestPermission
的活动版本。
Fragment Request Permission
改变
ActivityCompat.requestPermissions(this, new String[]android.Manifest.permission.READ_CONTACTS, REQUEST_CONTACT);
到
requestPermissions(new String[] android.Manifest.permission.READ_CONTACTS, REQUEST_CONTACT);
onRequestPermissionsResult 将被正确调用。
Credits
【讨论】:
以上是关于onRequestPermissionsResult 在片段中不起作用的主要内容,如果未能解决你的问题,请参考以下文章