2015-05-31 57 views
0

我正在開發一個Android框架,它由一個在前臺執行的主要.apk和一組「插件」組成,這些插件是可以下載和安裝的.apk無聲地進入設備。 這種架構的主要目的是隻有一個應用程序運行並且對用戶可見,並且一組插件由主應用程序執行但不能直接執行。Android,創建「不可見」.apk

到目前爲止,我發現,發現安裝在我的設備上可用的軟件包的一個方法是下面的代碼:

packageManager = getPackageManager(); 
applications = new ArrayList<>(); 
Intent intent = new Intent(Intent.ACTION_MAIN, null); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
List<ResolveInfo> availableActivities = packageManager.queryIntentActivities(intent,0); 

但這代碼檢索所有具有露出CATEGORY_LAUNCHER包。 我的問題是:

  • 我可以創建一個APK在安裝時是不可見的用戶?所以它沒有可能以獨立方式推出?
  • 如果我創建一個自定義的INTENT,如何讓主應用程序知道一個新的包被分組到新的意圖中,並且已經安裝在系統中?一種觸發器,有可能嗎?

回答

2

可以下載並安裝到設備默默

那是不可能的,除非是有根的設備上,或通過一個特殊的系統應用程序。否則,用戶將參與安裝插件。

我可以創建一個當用戶不可見時安裝的apk嗎?所以它沒有可能以獨立方式推出?

如果這是你的意思,你可以有一個沒有LAUNCHER<intent-filter>活動的應用程序。用戶仍然會在安裝的應用程序列表和設置中的其他位置看到您的插件。

使用此插件時,您還需要使用明確的Intent(具有組件集的組件),以將其移出停止狀態。在您使用明確的Intent與應用程序的某個組件交談之前,插件中的任何內容都不會運行(例如,清單註冊的接收器)。

如果我創建一個自定義的INTENT,如何讓主應用程序知道分組到新的意圖的新軟件包,已安裝在系統中?

這不是一個有效的英語句子。我會將其解釋爲:

如何才能找出用戶何時安裝插件?

你可以看ACTION_PACKAGE_ADDED broadcasts找出安裝新應用程序的時間。此時,您可以通過某種方式確定新安裝的應用程序是否爲您的插件。

+0

道歉爲我的英語。完美的答案,這正是我所期待的。謝謝! – Raffaeu

2

您可以從Manifest文件中爲所需的Activity刪除以下內容。

<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
+0

http://developer.android.com/guide/components/intents-filters.html – ramzavil