2012-09-05 81 views
1

我已經實現了一個基本上是用於更新和啓動相關應用程序系列的自定義應用程序商店的應用程序。它也需要自行更新,它可以正常工作,但是在安裝過程中應用程序不會發出警告而死亡。我想在這種情況下自動重新啓動應用程序,以便用戶可以在更新後立即繼續使用它。通過外部廣播接收器重新啓動應用程序

因此,我製作了一個單獨的應用程序,其中只包含一個廣播接收器,它偵聽第一個應用程序包名稱的包事件並開始一個新的活動。 那個接收器不會被調用

<application android:icon="@drawable/ic_launcher" 
android:label="@string/app_name"> 

<receiver android:name=".AppUpdateReceiver"> 
    <intent-filter> 
    <action android:name="android.intent.action.PACKAGE_REPLACED"/> 
    <action android:name="android.intent.action.PACKAGE_ADDED"/> 
    <action android:name="android.intent.action.PACKAGE_INSTALL"/> 
    <data android:scheme="package" /> 
    </intent-filter> 
</receiver> 

在尋找我看到的只有一個接收器的應用程序是否能執行直接矛盾的信息類似的實現,以及一個接收器是否會被調用,如果它的應用程序尚未運行。我甚至遇到了一個僅包含一個接收器的應用程序example code,其中一個清單非常類似於我自己的清單。那麼在這個應用程序中我需要什麼來確保在另一個軟件包安裝時調用接收器?

如果有更好的解決方案,我很樂意聽到它。

回答

1

根據Android的版本,您可能需要啓動一個應用程序組件,以便登記BroadcastReceiver。我的意思是,需要有一個啓動器Activity,它必須由用戶手動啓動。

從Honeycomb(我認爲)開始,除非應用程序已經以某種方式手動啓動,否則不可能讓應用程序組件處於活動狀態。這背後的原因是在沒有最終用戶的知識的情況下執行不安全代碼的可能性。

我懷疑這是你正在經歷的。要測試它,請在其中包含BroadcastReceiver的應用程序中添加一個簡單的「Hello World」Activity。啓動Activity,然後檢查BroadcastReceiver是否在更新其他軟件包後被調用。

+0

我試過了,如果我首先在該應用中啓動了一個活動,它確實會工作,但這並不能真正幫助我嘗試完成。我可以做一些類似的服務,並以某種方式啓動從更新應用程序的服務? –

+0

我發現了一個使用不可見Activity的相關解決方案,所以我要去那個http://stackoverflow.com/questions/4467600/how-to-launch-a-android-service-when-the-app-launches –

+0

這是做到這一點的一種方式,但讓用戶體驗讓他們知道發生了一些事情是一種很好的做法 - 一種無形的「Activity」基本上與此相反,您至少應該提供某種形式的反饋。 – Squonk