领导叫我把公司老项目targetSdkVersion升级一下,原项目targetSdkVersion为19,现在升级到30,cocossdk的版本还是老的3.0,这个不升级,升级完成后,我需要在app启动时动态获取读写权限,这个应该一开始就获取,于是我在onCreate中加入了权限获取的代码:
private String[] contactPermissions = new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE
};
private static final int CONTACT_REQUEST_CODE =100;
private void checkPermissions() {
unGrantedPermissions = new ArrayList();
for (int i = 0; i < contactPermissions.length; i++) {
if (ContextCompat.checkSelfPermission(AppActivity.this, contactPermissions[i]) != PackageManager.PERMISSION_GRANTED) {
unGrantedPermissions.add(contactPermissions[i]);
}
}
if (unGrantedPermissions.isEmpty()) {//未授予的权限为空,表示都授予了
Toast.makeText(AppActivity.this,"已经授权",Toast.LENGTH_LONG).show();
} else {//请求权限方法
Log.i("nanananana", "initData isEmpty no");
String[] permissions = unGrantedPermissions.toArray(new String[unGrantedPermissions.size()]);//将List转为数组
ActivityCompat.requestPermissions(AppActivity.this, permissions, CONTACT_REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
Log.i("nanananana", "onRequestPermissionsResult");
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//可在此继续其他操作。
switch (requestCode) {
case CONTACT_REQUEST_CODE:
NextContinue();
break;
default:
break;
}
}
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
_instance = this;
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
//虚拟键隐藏 began
this.hideNavigationBar();
this.getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int arg0) {
// TODO Auto-generated method stub
_instance.hideNavigationBar();
}
});
//虚拟键隐藏 end
m_game_for_cpp = new GameAPIForCPP();
m_game_for_cpp.init(this);
m_game_from_cpp = new GameAPIFromCPP();
m_game_from_cpp.init(this);
// 权限相关 began
if (Build.VERSION.SDK_INT >= 23
&& this.getApplicationInfo().targetSdkVersion >= 23) {
checkPermissions();
}
else{
NextContinue();
}
}
结果程序一启动,弹出了授权框,同时程序闪退了,看日志打印了这样一句话:
E/cocos2d-x assert: D:\cocos2d-x-3.0\frameworks\runtime-src\proj.android…/…/cocos2d-x/cocos//2d/platform/android/CCApplication.cpp function:getInstance line:79
--------- beginning of crash
2021-08-12 20:55:09.427 15495-15517/? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 15517 (GLThread 1395)
有哪位大佬知道什么原因吗?同样的获取权限代码我放在后面程序启动完成后的点击操作里,是没有问题的,放在onCreate就闪退,哪位大佬能指导一下,非常感谢!!!