首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android权限: onRequestPermissionsResult()未被调用

Android权限: onRequestPermissionsResult()未被调用
EN

Stack Overflow用户
提问于 2015-09-22 10:42:13
回答 25查看 195.9K关注 0票数 310

我正在更新我们的应用程序,以使用新的M运行时权限系统。除了onRequestPermissionsResult()之外,一切都在工作。我需要检查按下按钮的权限,如果成功的话,发送一条短信。当我授予权限这样做,对话框关闭,但它不会触发发送文本,直到我再次按下按钮。

我已经在onRequestPermissionsResult()方法中调试和设置了断点,但它从未进入其中。

首先调用此方法:

代码语言:javascript
运行
复制
    private void askForPermission() {
    String[] permissions = new String[]{Manifest.permission.SEND_SMS};
    ActivityCompat.requestPermissions(getActivity(), permissions, PERMISSIONS_CODE);
}

然后我的回调看起来是这样的:

代码语言:javascript
运行
复制
    @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);
                }
            }
        }
    }
}

有没有人遇到过类似的问题?感谢你在这方面的任何帮助。谢谢

EN

回答 25

Stack Overflow用户

回答已采纳

发布于 2015-10-12 12:28:51

这个问题实际上是由NestedFragments引起的。基本上,大多数片段都扩展了HostedFragment,而后者又扩展了CompatFragment。拥有这些嵌套的片段会导致问题,最终由项目上的另一个开发人员解决。

他正在做一些低层次的事情,比如比特切换,以使这个工作,所以我不太确定实际的最终解决方案

票数 10
EN

Stack Overflow用户

发布于 2015-10-12 12:04:42

我遇到了同样的问题,我只是找到了解决办法。在使用支持库时,必须使用正确的方法调用。例如:

  • AppCompatActivity,中,您应该使用ActivityCompat.requestPermissions
  • android.support.v4.app.Fragment,中,您应该使用简单的requestPermissions (这是android.support.v4.app.Fragment的实例方法)

如果在片段中调用onRequestPermissionsResult,则在活动上调用ActivityCompat.requestPermissions回调,而不是对片段调用。

票数 587
EN

Stack Overflow用户

发布于 2015-09-22 11:14:25

你可以试试这个:

代码语言:javascript
运行
复制
requestPermissions(permissions, PERMISSIONS_CODE);

如果要从片段中调用此代码,那么它有自己的requestPermissions方法。我认为问题在于您正在调用静态方法。

Pro提示如果您希望将onRequestPermissionsResult()放在片段中:FragmentCompat.requestPermissions(Fragment fragment, String[] permissions, int requestCode)

票数 106
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32714787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档