【发布时间】:2018-05-08 10:24:15
【问题描述】:
我的运行时权限有问题,我尝试为 Marshmallow 及更高版本管理它们,但我的应用程序仍然在运行时崩溃(不是在我重新启动应用程序时) 这是活动代码:
在清单中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
这里是活动代码(我认为不是全部,但必须理解)
public class HomeActivityNew extends AppCompatActivity implements AdapterView.OnItemClickListener, View.OnClickListener, SeekBar.OnSeekBarChangeListener {
// here all variables ...
private boolean permissionToRecordAccepted = false;
private boolean permissionToWriteAccepted = false;
private String[] permissions = {"android.permission.RECORD_AUDIO", "android.permission.WRITE_EXTERNAL_STORAGE"}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_new);
int requestCode = 200;
if (Build.VERSION.SDK_INT >= 23) {
requestPermissions(permissions, requestCode);
}
init();
myHandler = new Handler();
slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.HIDDEN);
SetupToolbar();
SetupPager();
SetupDrawer();
iv_playpause.setTag("pause");
MobileAds.initialize(getApplicationContext(), getResources().getString(R.string.admov_id));
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
/* SharedPreferences pref = getSharedPreferences("logincheck", Context.MODE_PRIVATE);
SharedPreferences.Editor edit1 = pref.edit();
edit1.putString("login","true");
edit1.apply();*/
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 200:
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
permissionToRecordAccepted=true;
}
if(grantResults.length > 0 && grantResults[1] == PackageManager.PERMISSION_GRANTED){
permissionToWriteAccepted=true;
}
break;
}
if (!permissionToRecordAccepted) HomeActivityNew.super.finish();
if (!permissionToWriteAccepted) HomeActivityNew.super.finish();
}
这是错误:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=200, result=0, data=null} to activity {com.mypackage.HomeActivityNew}: java.lang.
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
变量grantResults 为空!
运行时的应用程序显示权限对话框窗口并同时崩溃,但是当我重新启动应用程序时,它会等待权限
【问题讨论】:
-
访问前检查长度..
grantResults[1]. -
您应该验证您使用的是正确的
requestPermissions- 请参阅Android M Permissions onRequestPermissionsResult not being called -
我听从了你的所有建议,但我仍然有错误“权限窗口在 1 秒内消失
标签: android indexoutofboundsexception android-permissions