如何从即时应用列出已安装的应用?

时间:2018-02-10 16:22:34

标签: android android-instant-apps

根据documentation

  

即时应用程序仅限于发现设备上已安装应用的列表,除非   安装的应用程序已经让自己可以被即时应用程序发现。

还有a way可以让我们的应用程序可以被即时应用程序发现。

但是当我们使用getPackageManager()时,代码会与

崩溃
  

错误=很遗憾,TheAppName即时应用已停止。

Logcat中没有打印任何内容。以下内容打印在Debug控制台上,

02/10 22:57:27: Launching instantapp
Side loading instant app.
Side loading instant app.
Launching deeplink: https://myapp.mycompany.com/example.

$ adb shell setprop log.tag.AppIndexApi VERBOSE
$ adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d https://myapp.mycompany.com/example -n "com.google.android.instantapps.supervisor/.UrlHandler"
Waiting for application to come online: com.mycompany.myapp.instantappscanner.test | com.mycompany.myapp.instantappscanner
Waiting for application to come online: com.mycompany.myapp.instantappscanner.test | com.mycompany.myapp.instantappscanner
Waiting for application to come online: com.mycompany.myapp.instantappscanner.test | com.mycompany.myapp.instantappscanner
Could not connect to remote process. Aborting debug session.

代码:

PackageManager packageManager = getPackageManager();
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Source dir : " + packageInfo.sourceDir);
}

Android版本:6.0.1

更新

不打印日志的原因是debugger was not attached to the App。来自adb控制台的日志显示:

02-11 21:06:56.347: E/AndroidRuntime(18033): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.myapp.aninstantapp/com.mycompany.myapp.aninstantapp.feature.MainActivity}: java.lang.SecurityException: Method class android.content.pm.IPackageManager$Stub$Proxy.getInstalledApplications[int, int] not available to instant apps

Full stack trace

堆栈跟踪打印出即时应用程序不允许调用,但是如果很少有应用程序自己discoverable to instant apps怎么办?而不是抛出异常方法调用应返回仅包含应用程序的部分应用程序列表,这些应用程序使自己可以被即时应用程序发现?

简短问题

需要帮助从即时应用程序执行以下代码。

List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

抛出异常,

SecurityException: IPackageManager$Stub$Proxy.getInstalledApplications[int, int] not available to instant apps

它不应该引发异常,因为文档支持(如上所述)可以让很少的应用程序能够让自己被即时应用程序发现。

1 个答案:

答案 0 :(得分:2)

使用参考即时应用文档3.15. Instant Apps 设备实现必须满足以下要求:

  • 使用 android:visibleToInstantApps
  • 明确公开目标

使即时应用可见,并且支持来自 Android 8.0

如果我们必须从 isInstantApp

检查 installed app > 如果来电者能够看到即时应用,

isInstantApp(packageName) 将返回有效值(false)。调用者可以在以下场景中看到即时应用程序:

  • 这是即时应用
  • 是系统的一部分
  • 持有权限 ACCESS_INSTANT_APPS
  • 是否定义了系统,默认启动器保持不变 权限 VIEW_INSTANT_APPS
  • 即时通讯应用程序 app已建立与暴露组件的连接[例如。界 服务,开展活动等...... ]

    MoreInfo