Android5.0暗黙的起動サービス
2906 ワード
Android 5.0では暗黙的な意図でサービスを起動することは禁止されていますが、暗黙的な意図で起動すると異常が報告されるため、明示的な意図でサービスを起動する必要があります.起動するサービスが本アプリケーションであれば、明示的な意図で起動することもできますが、他のアプリケーションのサービスを起動する場合は、どのように明示的な意図で起動しますか?Android 5.0以前の携帯電話のインストールは暗黙的に起動しようとするサービスに関連しており、問題は発生せず、5.0以降の主流の携帯電話で発生した問題である.暗黙的な意図は異常を報告し、appが崩壊し、他のアプリケーションの起動が本アプリケーション内にないサービスがどのように明示的な意図で起動するかを解決する.
1つの暗黙的な意図を明示的な意図に変換するだけです.1つ目はcompontentコンポーネントを設定します.
2つ目の方法:
サービスのパッケージ名がわかる場合:
1つの暗黙的な意図を明示的な意図に変換するだけです.1つ目はcompontentコンポーネントを設定します.
public class ExplicitIntentUtil {
public static Intent getExplicitIntent(Context context, Intent implicitIntent) {
PackageManager pm = context.getPackageManager(); // 。
// ResolveInfo , service.
List<ResolveInfo> info = pm.queryIntentServices(implicitIntent, 0);
// 。
if (info == null || info.size() != 1) {
return null;
}
// ServiceInfo.
ResolveInfo resolveInfo = info.get(0);
String packageName = resolveInfo.serviceInfo.packageName;
String className = resolveInfo.serviceInfo.name;
// Service , Component 。
ComponentName componentName = new ComponentName(packageName, className);
Intent explicitIntent = new Intent(implicitIntent);
explicitIntent.setComponent(componentName);
return explicitIntent;
}
}
Intent bindIntent = new Intent("com.example.servicedemo.DemoAIDL");
Intent explicitIntent = ExplicitIntentUtil.getExplicitIntent(MainActivity.this, bindIntent);
bindService(bindIntent, conn, BIND_AUTO_CREATE);
2つ目の方法:
サービスのパッケージ名がわかる場合:
Intent bindIntent = new Intent("com.example.servicedemo.DemoAIDL");
bindIntent.setPackage("com.example.servicedemo");
bindService(bindIntent, conn, BIND_AUTO_CREATE);