2015-06-19 54 views
0

參考this後我需要問別的東西。安裝後通過應用程序無需啓動

我有一個應用程序「A」它下載並安裝另一個應用程序「B」
我想要B將數據「傳輸」到A然後A將使用此數據來完成工作。

我知道我們可以通過intent傳輸數據。
安裝後B應用程序與A,Android提供了一個選擇「好」或「啓動」;我的問題是:

  • 是不是可以從一個傳遞數據,當我們點擊「確定」? (所以我們留在A應用程序不啓動B
  • 如果是的話,怎麼樣?是否有可能以「隱形」發射B?我應該如何編碼B才能得到這個比較?

我知道這可能很難理解,你可以嘗試檢查我以前的平局(here再次)。

編輯:

我用這個代碼從一個推出安裝。

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory().toString() + "/downloadedfile.apk")); 
Intent.setDataAndType(uri, "application/vnd.android.package-archive"); 
getApplicationContext().startActivity(intent); 
+0

a)由應用程序B 「OK」 或 「啓動」? b)或包管理器/ instalator應用程序? ....顯然:如果a)然後是,發送廣播到A的onCreate的B活動,並關閉...如果b)根本不可能 – Selvin

+0

我編輯,我用它來安裝B應用程序,然後你有手動installtion(像所有的Android應用程序,檢查特權,接受然後安裝),然後,Android問你是否要啓動你的新應用程序。我不想啓動** B **或不在這裏,我需要留在** A **活動中,但是需要檢索** B **數據 –

+0

,因爲如果用戶不啓動一個B的API11組件將不可用其活動... – Selvin

回答

1

有很多方法可以解決這個問題,這裏有一個(我相信)實現起來相當簡單。由於您的A應用[大概]知道它正在安裝什麼:

應用A:添加BroadcastReceiver以對安裝作出反應,但默認情況下關閉。

Android: BroadcastReceiver on application install/uninstall

應用B:背景通信添加Service

注:Service必須出口是通過明確意圖的其他應用程序訪問,但是這將創建一個安全的關注,因爲它是開放給所有其他應用。

當App A的用戶點擊來安裝應用程序B:

設置爲檢測所述安裝一個過濾器啓動BroadcastReceiverstackoverflow...android-broadcastreceiver-on-application-install-uninstall

應用A開始安裝。

BroadcastReceiver檢測到已添加軟件包(軟件包名稱將在收到的意圖中)時,它可以停止BroadcastReceiver,並且可以發送命名AppB中服務的explicit Intent。您可以將意圖中需要的任何數據傳遞給您。

當AppB服務收到意圖時,它可以以任何您想要的方式進行操作。

服務始終使用非空意圖創建,儘管顯式的Intent的「操作」爲空。 如果服務被重新創建,Service.onStartCommand()可能會收到一個空的Intent。

我填寫更多的代碼,但我有一天的工作;)

注:
Intent.ACTION_PACKAGE_ADDED安裝包時調用。
Intent.ACTION_PACKAGE_INSTALL從未使用,並且在API被廢棄14.

http://developer.android.com/reference/android/content/BroadcastReceiver.html http://developer.android.com/reference/android/content/Intent.html

+0

非常感謝。我會盡快檢查它(可能下個星期一),然後可能問你一些其他問題! –

+0

安裝我的應用程序後,我得到了我的BroadcastReceiver。那麼,我需要在AppB中調用該服務?我怎樣才能做到這一點?考慮到我甚至沒有啓動AppB,這甚至可能嗎?如果可能的話,我需要將數據從AppB服務傳輸到AppA? –

+0

從AppA向AppB發送明確的意圖(添加上面的鏈接)詢問數據,然後從AppB向AppA發送一個數據。有很多替代方法可以實現這一點,但這可能是最容易實現的。 – CodeShane

相關問題