Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 로이앤메이
- 서귀다원
- 리눅스
- EC2종료
- 원동항공
- 광어튀김 서비스
- 갈치공장
- 람다
- 안매움
- 두문포갈치
- 무조건 비빔밥
- 펑후
- AutoPermissions
- 제주
- 종가식당
- 자자손손 멸치국수
- 구조에 청소가 필요합니다
- Linux
- GradleException
- 사진찍기 좋음
- 한아름목장
- 지은이네 밥상
- GP2Y1010AU
- 중국 가정식
- 가성비
- 성산
- 1602 LCD
- EC2
- permission cannot be null or empty
- pm2.5
Archives
- Today
- Total
내 소소한..
AutoPermissions 사용 시 permission cannot be null or empty 가 나올 때 본문
책과 인터넷에서 AutoPermissions 1.0.3을 사용하는 예제를 따라가다 보면 아래와 같은 에러가 발생하고 앱이 크래시된다.
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.receivesms/com.example.receivesms.MainActivity}: java.lang.IllegalArgumentException: permission cannot be null or empty
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.IllegalArgumentException: permission cannot be null or empty
at android.content.pm.PackageManager.buildRequestPermissionsIntent(PackageManager.java:3461)
at android.app.Activity.requestPermissions(Activity.java:4366)
at androidx.core.app.ActivityCompat.requestPermissions(ActivityCompat.java:502)
at com.pedro.library.AutoPermissions$Companion.loadActivityPermissions(AutoPermissions.kt:74)
at com.example.receivesms.MainActivity.onCreate(MainActivity.java:20)
at android.app.Activity.performCreate(Activity.java:6975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
permission cannot be null or empty <- 이 메시지가 핵심이다.
일반적인 예제에서 제공되는 코드는 다음과 같다.
public class MainActivity extends AppCompatActivity implements AutoPermissionsListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AutoPermissions.Companion.loadActivityPermissions(this, 101);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.d("Main", "onRequestPermissionsResult 호출됨");
AutoPermissions.Companion.parsePermissions(this, requestCode, permissions, this);
}
@Override
public void onDenied(int reqCode, String[] perms) {
Log.d("Main", "onDenied 호출됨");
Toast.makeText(this, "권한거부:"+perms.length, Toast.LENGTH_LONG).show();
for ( String perm: perms ) {
Log.d("Main", "거부: "+perm);
}
}
@Override
public void onGranted(int reqCode, String[] perms) {
Log.d("Main", "onGranted 호출됨");
Toast.makeText(this, "권한허용:"+perms.length, Toast.LENGTH_LONG).show();
for ( String perm: perms ) {
Log.d("Main", "허용: "+perm);
}
}
}
Exception이 발생한 MainActivity의 20번째 라인은 AutoPermissions.Companion.loadActivityPermissions(this, 101); 부분이다. (위 코드에서는 8번째 라인..)
원인
loadActivityPermissions 메서드를 사용할 때는 AndroidManifest.xml 파일 내 <activity> 프래그먼트 내에 meta-data 정의가 필요하다.
해결책 1
위 코드에서 AutoPermissions.Companion.loadActivityPermissions(this, 101); 을 AutoPermissions.Companion.loadAllPermissions(this, 1); 로 교체한다.
해결책 2
AndroidManifest.xml 파일 내 activity 프래그먼트 내에 meta-data를 추가한다.
<meta-data android:name="@string/permissions_loader_meta_key" android:value="android.permission.RECEIVE_SMS"/> 같은 형태로, value는 ,로 구분해서 여러 가지 위험 권한을 지정할 수 있다.
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="@string/permissions_loader_meta_key"
android:value="android.permission.RECEIVE_SMS"/>
</activity>
'IT > Android' 카테고리의 다른 글
Flutter 프로젝트에서 app build.gradle의 Properties가 Cannot Resolve Symbol 일 때 (6) | 2021.03.20 |
---|
Comments