Android11:启动另一个应用的服务

Android 11: starting a service of another app

第一个应用有服务:

<service
    android:name="com.example.app.service.MyService"
    android:exported="true">
    <intent-filter>
        <action android:name="com.example.app.START_MY_SERVICE" />
    </intent-filter>
</service>

另一个应用使用(3 种可能的方法)启动第一个应用的服务:

1:

val i = Intent("com.example.app.START_MY_SERVICE").apply {
    setPackage("com.example.app")
}
startService(i)

2:

val i = Intent().apply {
    component = ComponentName("com.example.app", "com.example.app.service.MyService")
}
startService(i)

3:

val i = Intent().apply {
    setClassName("com.example.app", "com.example.app.service.MyService")
}
startService(i)

所有这些启动另一个应用程序服务的方法从 23 API (6 Android) 到 29 API (10 Android)

在Android11(30API)上不行,一个服务不启动,无一例外:

当使用 2-3 种方法时,在 Logcat 中打印:

W/ActivityManager: Unable to start service Intent { cmp=com.example.app.service/.service.MyService } U=0: not found

对于 1 种方法,什么都没有发生,在 Logcat

没有消息

那么我们如何在 Android 11 上从另一个应用程序启动某个应用程序的服务?

启动另一个应用程序服务的应用程序必须在清单中包含下一个声明:

<queries>
    <package android:name="com.example.anotherapp" />
</queries>

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />

(Automate 和 Tasker 等应用程序有此权限)

感谢 CommonsWare

我也在寻找如何打开 exprnal 应用程序,当我无法获得信息时,这个应用程序是否安装在 phone 上。您可以尝试 startActivity() 并处理 ActivityNotFoundException,如果它存在,则意味着应用程序未安装在 phone 上或无法打开这样的链接。还有一些意图标志,如果意图启动浏览器或选择 activity 对话框,也可以使 ActivityNotFoundException:FLAG_ACTIVITY_REQUIRE_NON_BROWSER、FLAG_ACTIVITY_REQUIRE_DEFAULT

这里是关于这个案例的更多官方信息和其他信息:

在 Android 中打开外部应用程序:

https://developer.android.com/training/package-visibility/use-cases

https://developer.android.com/training/package-visibility

https://developer.android.com/training/basics/intents

告诉我们什么时候可以使用 QUERY_ALL_PACKAGES 权限: https://support.google.com/googleplay/android-developer/answer/10158779

https://developer.android.com/training/package-visibility/use-cases

https://medium.com/androiddevelopers/package-visibility-in-android-11-cc857f221cd9

https://docs.microsoft.com/en-us/answers/questions/517132/startactivity-throws-error-in-android-11-api-30.html

https://www.ibm.com/docs/en/trusteer-mobile-sdk/5.3?topic=android-step-1-modify-app-manifest-androidmanifestxml

https://pretagteam.com/question/android-11-sdk-30-launch-external-app-doesnt-work

https://proandroiddev.com/the-quick-developers-guide-to-migrate-their-apps-to-android-11-e4ca2b011176