내 응용 프로그램을 시험 중입니다.하지만 휴대 전화에 apk를 처음 설치하면 권한이 빨리 표시되고 충돌이 발생하며 권한을 다시 표시하고 확인 및 확인을 확인합니다.권한을 요청하기 전에 시작시 응용 프로그램이 다운 됨
어떻게 방지 하시겠습니까? 일부 사용자는 앱을 다시 시작하지 않기 때문에! 당신
감사합니다 이건 내 권한입니다 : 프로젝트에 대해
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<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" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
정보 (Probleme은 단지 오디오 녹음에서 파일에 대한 액세스입니다) :
의 minSdkVersion 15
targetSdkVersion을 26
compileSdkVersion 26
고맙습니다.
오류 로그에서이 오류 :
11-21 17:46:17.298 24237-24647/com.geniusly.myapp E/Message_Register: DONE
11-21 17:46:17.476 24237-24237/com.geniusly.myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.geniusly.myapp, PID: 24237
java.lang.RuntimeException: Failure delivering result ResultInfo{[email protected]:requestPermissions:, request=200, result=0, data=null} to activity {com.geniusly.myapp/tin.subtil.HomeActivityNew}: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at android.app.ActivityThread.deliverResults(ActivityThread.java:4481)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4524)
at android.app.ActivityThread.-wrap22(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1691)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at tin.subtil.HomeActivityNew.onRequestPermissionsResult(HomeActivityNew.java:298)
at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7404)
at android.app.Activity.dispatchActivityResult(Activity.java:7230)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4477)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4524)
at android.app.ActivityThread.-wrap22(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1691)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
편집 : (에서 onCreate)
다음@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);
}
RequestPermissions에서
private boolean permissionToRecordAccepted = false;
private boolean permissionToWriteAccepted = false;
private String[] permissions = {"android.permission.RECORD_AUDIO", "android.permission.WRITE_EXTERNAL_STORAGE"};
:
이 내 코드입니다
@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();
}
당신의 로그를 확인하십시오 당신은 몇 가지 코드와 충돌 – diegoveloper
를 넣어, 오류의 java.lang.ArrayIndexOutOfBoundsException가 배열 –
의 스택 트레이스를 게시 할 수 귀하의 초기 활성 코드 –