[英]How to list installed apps from instant app?
根據文檔 ,
即時應用程序僅限於發現設備上已安裝應用程序的列表,除非已安裝的應用程序使自己可被即時應用程序發現。
還有一種方法可以使我們的應用程序可被即時應用程序發現。
但是,當我們使用getPackageManager()
,代碼將崩潰,
錯誤=不幸的是,TheAppName即時應用已停止。
Logcat中未打印任何內容。 以下內容打印在調試控制台上,
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);
}
安卓版本:6.0.1
更新
不打印日志的原因是未將調試器附加到應用程序 。 來自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
堆棧跟蹤打印顯示不允許從即時應用程序進行呼叫,但是如果很少有應用程序使自己可被即時應用程序發現,該怎么辦? 而不是拋出異常方法調用,應該返回部分應用程序列表,其中僅包含使自己可以被即時應用程序發現的應用程序?
需要幫助從即時應用程序執行以下代碼。
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
它引發異常,
SecurityException: IPackageManager$Stub$Proxy.getInstalledApplications[int, int] not available to instant apps
它不應該引發異常,因為(如上)文檔支持,只有幾個應用程序可以被即時應用程序發現。
帶有參考Instant App Documentation 3.15。 Instant Apps設備實施必須滿足以下要求:
android:visibleToInstantApps
顯式公開 使即時應用程序可見,並且支持Android 8.0
如果我們必須從installed app
檢查isInstantApp
如果調用者能夠看到即時應用程序,則isInstantApp(packageName)
將返回有效值( false
)。 呼叫者可以在以下情況下查看即時應用程序:
ACCESS_INSTANT_APPS
VIEW_INSTANT_APPS
是常規應用程序,即時應用程序已經建立了與公開組件的連接[ 例如, 綁定到服務,開始活動等... ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.