Android 5.0 에 나타 난 경고 해결: Service Intent must be explicit
5376 단어 android
이 게시 물 은 마지막 으로 469874851 에서 2015 - 3 - 11 18: 15 편집 되 었 습 니 다. 가끔 은 저희 가 서 비 스 를 사용 할 때 프라이버시 로 시작 해 야 하 는데 안 드 로 이 드 5.0 이 나 오 자마자 Service Intent 라 는 특성 이 있 습 니 다. must be explitict, 즉 Lollipop 부터 service 서 비 스 는 디 스 플레이 방식 으로 시작 해 야 한 다 는 것 이다.안 드 로 이 드 소스 코드 는 이렇게 쓰 여 있 습 니 다 (소스 위치: sdk / sources / android - 21 / android / app / contextImpl. 자바):
private void validateServiceIntent(Intent service) {
if (service.getComponent() == null && service.getPackage() == null) {
if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP) {
IllegalArgumentException ex = new IllegalArgumentException(
"Service Intent must be explicit: " + service);
throw ex;
} else {
Log.w(TAG, "Implicit intents with startService are not safe: " + service
+ " " + Debug.getCallers(2, 3));
}
}
}
원본 코드 에 이렇게 쓰 여 있 는 이상 두 가지 해결 방법 이 있 습 니 다. 1. Action 과 package Name: 참고 코드 는 다음 과 같 습 니 다.
Intent mIntent = new Intent();
mIntent.setAction("XXX.XXX.XXX");// service action
mIntent.setPackage(getPackageName());//
context.startService(mIntent);
이 방식 은 구 글 이 공식 적 으로 추천 하 는 해결 방법 이다.여기 주 소 를 참고 하 시기 바 랍 니 다. http://developer.android.com/goo ... tml#billing-service 관심 있 는 것 은 가 보 셔 도 됩 니 다.2. 암시 적 시작 을 디 스 플레이 시작 으로 변환 합 니 다. - 참고 주소: http://stackoverflow.com/a/26318757/1446466
public static Intent getExplicitIntent(Context context, Intent implicitIntent) {
// Retrieve all services that can match the given intent
PackageManager pm = context.getPackageManager();
List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0);
// Make sure only one match was found
if (resolveInfo == null || resolveInfo.size() != 1) {
return null;
}
// Get component info and create ComponentName
ResolveInfo serviceInfo = resolveInfo.get(0);
String packageName = serviceInfo.serviceInfo.packageName;
String className = serviceInfo.serviceInfo.name;
ComponentName component = new ComponentName(packageName, className);
// Create a new intent. Use the old one for extras and such reuse
Intent explicitIntent = new Intent(implicitIntent);
// Set the component to be explicit
explicitIntent.setComponent(component);
return explicitIntent;
}
호출 방식 은 다음 과 같 습 니 다.
Intent mIntent = new Intent();
mIntent.setAction("XXX.XXX.XXX");
Intent eintent = new Intent(getExplicitIntent(mContext,mIntent));
context.startService(eintent);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.