此代码在API 24中运行良好,但是在用户提供权限后,应用程序在API 23中崩溃了。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
isPermissionGranted();
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.v("", "Permission: " + permissions[0] + "was " + grantResults[0]);
permissionGranted();
}
}
public void isPermissionGranted() {
if (Build.VERSION.SDK_INT > 22) {
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
Log.v("","Permission is granted");
permissionGranted();
} else {
Log.v("","Permission is revoked");
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
}
else { //permission is automatically granted on sdk<23 upon installation
Log.v("","Permission is granted");
permissionGranted();
}
}
//called after permission given by user
public void permissionGranted(){
SystemChanges systemChanges = new SystemChanges();
systemChanges.setStatusBarColor(this);
mainFragment();
}
//inflate the main fragment
public void mainFragment(){
MainFragment mainFragment = new MainFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.fragmentMain, mainFragment, "mainFragment");
fragmentTransaction.commit();
}
它在API 23中提供的错误
java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=1, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.example.anshul.player/com.example.anshul.player.MainActivity}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState