android - 权限回调和授予权限之间的明显延迟
问题描述
所以,这是一个具有引导接收器的棒棒糖应用程序 (5.0)。引导接收器启动一个活动 (SplashActivity.class)。SplashActivity 的目的是在启动 MainActivity.class 之前获得所有必要的权限。
public class SplashActivity extends Activity {
private static boolean bPermission = false;
private static final int MY_PERMISSIONS_REQUEST = 100;
private static final String[] allRequestedPermissions = new String[] {
Manifest.permission.READ_CONTACTS,
Manifest.permission.SEND_SMS,
Manifest.permission.CALL_PHONE
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getIntent().hasExtra("PERMISSION_FOR_SERVICE")) {
bPermission = true;
}
if (!checkAllRequestedPermissions()) {
ActivityCompat.requestPermissions(this, allRequestedPermissions, MY_PERMISSIONS_REQUEST);
}
else {
startMainActivity();
}
}
private boolean checkAllRequestedPermissions() {
for (String permission : allRequestedPermissions) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
private boolean isServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST: {
if (checkAllRequestedPermissions()) {
startMainActivity();
}
else {
finish();
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
private void startMainActivity() {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
if(bPermission) {
intent.putExtra("PERMISSION_FOR_SERVICE","_");
}
startActivity(intent);
}
}
在所有权限检查和请求之后(如果您滚动到底部)最终发生的是它启动 MainActivity。
问题是我宁愿它在 bPermission == true 的情况下不启动 MainActivity。如果 bPermission == true,则更喜欢以下行为:
private void startMainActivity() {
if(bPermission) {
startService(new Intent(this, SchedulerService.class));
finish();
}
else {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
intent.putExtra("PERMISSION_FOR_SERVICE", "_");
startActivity(intent);
}
}
但是,这会使应用程序崩溃。有什么想法可能是错的吗?提前谢谢了
已解决:我的服务有一个不知道的依赖项。在启动服务修复问题之前初始化依赖关系!谢谢@mike m.!!
解决方案
已解决:我的服务有一个不知道的依赖项。在启动服务修复问题之前初始化依赖关系!谢谢@Mike M.!
推荐阅读
- mysql - 如何编写 MySQL sql 查询?
- datetime - 如何在容器中注入 Docker 容器构建时间戳?
- ios - 如何将CALayer放在视频数据输出的CMSampleBuffer上?
- vue.js - 返回Vue中静态资源(png)的路径
- android - DFU模式下的蓝牙:某些设备的连接总是失败
- node.js - 在回调函数中更改全局变量值
- css - 在 TYPO3 中使用自己的自定义 css
- android - 如果 Oreo 上的屏幕关闭,我的 WebView 不会呈现 HTML 页面
- python - Pytorch 张量 - 如何通过特定张量获取索引
- node.js - 在 NodeJS 中启用 CORS