簡體   English   中英

如何從即時應用程序中列出已安裝的應用程序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM