Android5.0 이후에 은밀하게 ServiceBug 시작
통신 프로세스 간 통신 - AIDL
당시에는 4.2의 시스템을 사용했고 크로스 프로세스의 서비스는 액션에 따라 시작할 수 있다
Intent intent = new Intent();
intent.setAction("android.intent.action.aidl.server");
그런데 지금 6.0을 썼는데 오타가 났어요.
01-06 01:54:14.140: : Process: com.fang.zrf.clientdemo, PID: 18507
01-06 01:54:14.140: : java.lang.IllegalArgumentException: Service Intent must be explicit:
Intent { act=android.intent.action.aidl.server }
01-06 01:54:14.140: : at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1209)
01-06 01:54:14.140: : at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1308)
01-06 01:54:14.140: : at android.app.ContextImpl.bindService(ContextImpl.java:1286)
01-06 01:54:14.140: : at android.content.ContextWrapper.bindService(ContextWrapper.java:604)
01-06 01:54:14.140: : at com.fang.zrf.clientdemo.MainActivity.onClick(MainActivity.java:70)
01-06 01:54:14.140: : at android.view.View.performClick(View.java:5205)
잘못된 곳을 보고하는 서비스의 intent는 명확하고 표시된 지적이어야 합니다.이 때 같은 응용 프로그램에서 클래스 이름으로 시작할 수 있다면, 같은 응용 프로그램에서 서비스의 흐름을 통해 실행할 수 없다면.
setComponent에서 호출 가능
intent.setComponent(new ComponentName("com.fang.zrf.serverdemo", "com.fang.zrf.serverdemo.CustomService"));
통과할 수 있어요.
intent.setClassName("com.fang.zrf.serverdemo", "com.fang.zrf.serverdemo.CustomService");
본질적으로 같은 setClassName 원본이ComponentName 대상을 만들었기 때문에 호출합니다.
public Intent setClassName(String packageName, String className) {
mComponent = new ComponentName(packageName, className);
return this;
}
사실 사고방식은packagename과classname을 통해 호출하는 것이고 방법이 매우 많다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.