我正在尝试实现 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));
}
};
}
}
我有两个问题:
- 启动画面设计不会在权限请求对话框之前显示,并且屏幕停留在带有应用程序图标的 android 背景上。
- 当您同意权限时,永远不会调用
onRequestPermissionsResult
并且应用程序结束。
编辑:我在这里创建了一个示例应用程序:https://github.com/knyttl/TestApp – 它展示了两个问题。
EDIT2:当我同意/不同意权限请求时会发生这种情况 - 应用程序刚刚结束:https://www.youtube.com/watch?v=lhvhXcEJxLw&feature=youtu.be
最佳答案
- 您应该从
AppCompatActivity
扩展。 尝试更改行:
if (ActivityCompat.checkSelfPermission(this, CAMERA) != PERMISSION_GRANTED
到
`if (ActivityCompat.checkSelfPermission(this, Manifest.Permission.CAMERA) != PERMISSION_GRANTED`
- 将检查权限的代码移至
onResume
。或者将其保留在onCreate
中但延迟它,例如使用Handler
关于java - onRequestPermissionResult 永远不会从 Activity 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38101582/