【问题标题】:Android app crashes on 6.0 while seeking permissions with ActivityCompat.requestPermissions使用 ActivityCompat.requestPermissions 寻求权限时,Android 应用程序在 6.0 上崩溃
【发布时间】:2016-11-21 12:38:29
【问题描述】:

我正在关注 MainActivity,它寻求 6.0 电话和存储任务的许可。它提示 许可 2 次,然后崩溃。获得权限后是否需要重新启动 MainActivity? 感谢您的任何帮助或指点。

MainActivity.java

onCreate(){
seek_permissions()
//load db data and continue
//with the app tasks
}


public void seek_permissions(){
            boolean hasWritePermission = (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
            if (!hasWritePermission) {
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.MOUNT_FORMAT_FILESYSTEMS,Manifest.permission.RECEIVE_BOOT_COMPLETED,Manifest.permission.MODIFY_PHONE_STATE}, REQUEST_PERM);
            }        
    }
     @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case REQUEST_PERM:
            {
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                acquired_perm = 1;
                }
                else {Toast.makeText(MainActivity.this, "Please consider granting these permissions", Toast.LENGTH_LONG).show(); }
            }
            return;
        } 
    }

【问题讨论】:

  • "它提示权限 2x 次然后崩溃" -- 请发布与崩溃相关的 Java 堆栈跟踪。
  • 感谢您的回复,将尽快发布。
  • 同样的问题,应用在 4.4 上运行良好,在 6.0+ 中崩溃
  • 没有日志,没有异常,只是应用程序关闭并显示消息应用程序停止工作,在断点调试时我看到应用程序在ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_PHONE_STATE}) 行崩溃,我从详细级别非常仔细地检查了日志,但没有.
  • @talha,我犯了一个错误,没有将这些权限添加到清单文件中。你也有同样的情况吗?你对 Android Manifest 有这些权限吗? stackoverflow.com/questions/32115650/…

标签: android android-6.0-marshmallow android-permissions


【解决方案1】:

对我来说,这是因为在我的清单中为此活动使用了android:noHistory="true"

我认为这可能是 Android 6.0 的一个错误,因为更高版本似乎可以正常工作。

如果设置了noHistory,则ActivityCompat.requestPermissions 调用会导致调用Activity 的onDestroy 被执行从而破坏。由于 noHistory 它不再存在,因此它没有保存在历史记录中,并且当权限对话被关闭时应用程序基本上是关闭的。

作为一种解决方法,您可以在离开 Activity 并从清单中删除标签时,在 onStop() 或其他适当位置调用 finish(),而不是清单中的 "noHistory"

【讨论】:

  • @webminal.org 我知道它已经过时了,但你能把它标记为正确,因为人们仍然支持这个答案吗?
猜你喜欢
  • 2018-09-15
  • 2017-07-05
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
相关资源
最近更新 更多