java Android M权限:未调用onRequestPermissionsResult()
我正在更新我们的应用程序以使用新的m运行时权限系统。 除了onRequestPermissionsResult()之外,其他功能都正常工作。我需要检查一个按钮按下的权限,如果成功,发送一条短信。当我授予执行该操作的权限时,对话框关闭,但直到我再次按下按钮,对话框才会触发发送文本
我已经在onRequestPermissionsResult()方法中调试并设置了断点,但它从来没有进入
首先调用此方法:
private void askForPermission() {
String[] permissions = new String[]{Manifest.permission.SEND_SMS};
ActivityCompat.requestPermissions(getActivity(), permissions, PERMISSIONS_CODE);
}
然后我的回调如下所示:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSIONS_CODE) {
for (int i = 0; i < permissions.length; i++) {
String permission = permissions[i];
int grantResult = grantResults[i];
if (permission.equals(Manifest.permission.SEND_SMS)) {
if (grantResult == PackageManager.PERMISSION_GRANTED) {
onPPSButtonPress();
} else {
requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSIONS_CODE);
}
}
}
}
}
有人遇到过类似的问题吗? 谢谢你的帮助。 谢谢
# 1 楼答案
我也遇到了这个问题。如果您想要处理不在历史记录/最近记录中的权限的活动,那么您将尝试更改
AndroidManifest.xml
条目如果设置了调用
requestPermissions
或AppCompatActivity.requestPermissions
的活动在
AndroidManifest.xml
中,将不会调用onRequestPermissionsResult()
。如果您的活动是从Activity
或AppCompatActivity
派生的,则这是正确的这可以通过从“AndroidManifest”中删除两个标志来修复。“xml”,并用
finishAndRemoveTask()
来完成活动# 2 楼答案
我遇到了同样的问题,我刚刚找到了解决办法。使用支持库时,必须使用正确的方法调用。例如:
如果你打电话给ActivityCompat。requestPermissions在片段中,对活动而不是片段调用onRequestPermissionsResult回调
# 3 楼答案
你可以试试这个:
如果您是从片段调用此代码,它有自己的requestPermissions方法。我认为问题在于您正在调用静态方法
专业提示:如果希望片段中的
onRequestPermissionsResult()
,请执行以下操作:FragmentCompat.requestPermissions(Fragment fragment, String[] permissions, int requestCode)
# 4 楼答案
如果活动和片段中都有
onRequestPermissionsResult
,请确保在活动中调用super.onRequestPermissionsResult
。片段中不需要它,但它在活动中# 5 楼答案
我希望它能正常工作
对于活动:
对于片段:
# 6 楼答案
答案不推荐请参考: https://developer.android.com/training/permissions/requesting
在fragment内部,您需要调用:
不是: