2

默認情況下,它在停止狀態(尚未運行,即使一次)的應用程序不能得到廣播。如果我們將標誌FLAG_INCLUDE_STOPPED_PACKAGES添加到廣播意圖,有一種方法可以接收它。接收廣播的停止的應用程序

我的問題是,我需要接收系統意向android.intent.action.MEDIA_MOUNTED(我不想將該標誌添加到它)。

即使在停止的應用程序中,我怎樣才能收到它?

在我看來,肯定是有可能的,因爲例如com.android.shell應用程序即使強制停止也能夠接收這樣的意圖。它是如何做到的?


編輯

只是爲了澄清,因爲它出現了,這不是很明顯:這裏

一切都是但從Android開源項目開發者的角度。我正在修改操作系統源代碼,我希望接收廣播的應用程序可以預先安裝,使用平臺證書籤名,可以使用隱藏的API等。一切都是允許的,甚至是系統的修改。

+2

「我的問題是,我需要接收系統意圖android.intent.action.MEDIA_MOUNTED(並且我不想將該標誌添加到它)」 - 您不能將標誌添加到它,即使您想要因爲你不是廣播「意圖」的人。 「即使在停止的應用程序中,我怎樣才能收到它?」 - 一個普通的SDK應用程序不能做到這一點。可以想象,系統應用程序可以做到這一點,至少是預裝的。當然,具有Android修改版本的自定義ROM可以提供此功能。 – CommonsWare

+0

@CommonsWare:請參閱編輯的問題。我的應用程序不是普通的SDK應用程序,我可以修改系統。問題是如何以方便的方式做到這一點。 – damgad

+0

啊,是的,這顯着改變了這種情況。我無法幫助你,並且整個Stack Overflow傾向於擁有更多的資源來支持普通的SDK應用程序。一個可能的解決方案是禁用你的應用程序的強制停止。一大堆系統應用程序可以做到這一點,並且我認爲有一種配置其他系統應用程序的方法。然後,用戶應該沒有辦法將您的應用首先移動到停止狀態。 – CommonsWare

回答

3

將您的應用程序聲明爲系統應用程序,即使您的應用程序處於「已停止狀態」,也應該允許您接收常規廣播。

以下添加到您的清單,並確保您的應用程序由平臺密鑰簽名:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
... 
... 
android:sharedUserId="android.uid.system"> 
+0

如果我沒有android:sharedUserId =「android.uid.system」會怎麼樣? – JohnyTex

+0

我的應用程序是否必須使用平臺簽名進行簽名,還是足以將其放入/ system/priv-app? – JohnyTex

+1

從Android 4.4開始,即使未使用平臺密鑰簽名,/ system/priv-app APK也會獲得系統權限。欲瞭解更多信息:http://stackoverflow.com/a/20104400/6587754 –

0

如果你是一個有根的設備上可以使用Xposed修改android.content.Intent#isExcludingStopped,作爲這樣的:

public class DontExcludeStoppedPackagesFromIntents implements IXposedHookLoadPackage { 
    @Override 
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { 
     if (lpparam.packageName.equals("android")) { 
      XposedBridge.log("In package: " + lpparam.packageName); 

      findAndHookMethod("android.content.Intent", lpparam.classLoader, "isExcludingStopped", new XC_MethodReplacement() { 
       @Override 
       protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { 
        return false; 
       } 
      }); 
     } 
    } 
} 

不要忘了把類名xposed_init。 當然,這有一些安全隱患,可以有效地讓你回到Android 3.0--儘管這不應該成爲一個問題,因爲沒有人希望利用幾乎所有現有Android設備都沒有的漏洞,應用補丁。

我試過上面的,它的工作原理!

相關問題