java - onRequestPermissionResult 永远不会从 Activity 调用

标签 java android

我正在尝试实现 SplashScreenActivity,它将请求所有必要的权限,然后重定向到 MainActivity:

public class SplashScreenActivity extends Activity {

    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        setContentView(R.layout.splash_screen);

        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 0);
            ((TextView) findViewById(R.id.versionView)).setText(info.versionName);
        } catch (Exception e) {
            throw new IllegalStateException(e);
        }


        if (ActivityCompat.checkSelfPermission(this, CAMERA) != PERMISSION_GRANTED
                || ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(this, new String[]{READ_PHONE_STATE, CAMERA}, 200);
        } else {
            onPermissionsReady();
        }
    }



    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 200) {
            onPermissionsReady();
        }
    }

    private void onPermissionsReady() {
        new Fork() {
            @Override public void run() {
                ApplicationContext.getInstance(SplashScreenActivity.this);
                startActivity(new Intent(SplashScreenActivity.this, MainActivity.class));
            }
        };
    }
}

我有两个问题:

  1. 启动画面设计不会在权限请求对话框之前显示,并且屏幕停留在带有应用程序图标的 android 背景上。
  2. 当您同意权限时,永远不会调用 onRequestPermissionsResult 并且应用程序结束。

编辑:我在这里创建了一个示例应用程序:https://github.com/knyttl/TestApp – 它展示了两个问题。

EDIT2:当我同意/不同意权限请求时会发生这种情况 - 应用程序刚刚结束:https://www.youtube.com/watch?v=lhvhXcEJxLw&feature=youtu.be

最佳答案

  1. 您应该从 AppCompatActivity 扩展。
  2. 尝试更改行:

    if (ActivityCompat.checkSelfPermission(this, CAMERA) != PERMISSION_GRANTED

`if (ActivityCompat.checkSelfPermission(this, Manifest.Permission.CAMERA)  != PERMISSION_GRANTED`
  1. 将检查权限的代码移至onResume。或者将其保留在 onCreate 中但延迟它,例如使用 Handler

关于java - onRequestPermissionResult 永远不会从 Activity 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38101582/

相关文章:

java - org.apache.lucene.store.LockObtainFailedException : Lock obtain timed out:

java - 如何在运行长任务之前完成容器管理的事务?

java - 使用 Maven 只是为了获取一些库 jar

java - 为什么 RecyclerView 没有 onItemClickListener()?

android - map 中的翻新+ RX错误处理

java - 我在哪里可以写我的 AsyncTasks

java - 迭代器 hasNext 返回 true 但 next 抛出异常

java - 是否可以通过单个产品 ID 获取单个商品 SKU 详细信息? (Android、Iab 助手)

android - 如何在 Android 的 viewpager 的不可见 fragment 中执行一个函数

java - 为什么该值没有增加 int Firebase 数据库