2013-04-15 41 views
13

我無法從作爲系統應用程序加載到自定義ROM中的應用程序發送Broadcast(在Manifest中使用android:sharedUserId="android.uid.system")。在系統應用程序中使用sendBroadcast

我得到的問題是試圖執行一個簡單的sendBroadcast時:

Intent newIntent = new Intent(intent.getExtras().getString(BUNDLE_ACTION_TO_REPLY_ON)); 
newIntent.putExtra(BUNDLE_FILE_URI, bitmapFile.getAbsolutePath()); 
newIntent.putExtra(BUNDLE_REPLY_WIDTH, width); 
newIntent.putExtra(BUNDLE_REPLY_HEIGHT, height); 
newIntent.putExtra(BUNDLE_REPLY_EXTRA, extra); 
context.sendBroadcast(newIntent); 

我得到在logcat中這樣的警告:

Calling a method in the system process without a qualified user

這是由泵出ContextImpl.javawarnIfCallingFromSystemProcess()過程中。

有誰知道爲什麼(如果我需要「修復」它)?

+0

你可以顯示你初始化上下文的位置嗎? – RvdK

+0

它作爲Broadcast Receiver的一部分傳入('public void onReceive(final final context,final Intent intent)') – Graeme

+0

這個BroadcastReceiver是你的系統應用程序嗎? – RvdK

回答

9

使用下面的函數而不是sendBroadcast(意圖意圖)。

空隙sendBroadcastAsUser(意圖的意圖,用戶UserHandle)

例如,

context.sendBroadcastAsUser(newIntent,新UserHandle(UserHandle.USER_CURRENT));

+0

這不能被預先安裝的應用程序使用,請閱讀:[鏈接](http://goo.gl/J1GIXq) – MatPag

+0

@Mat:是的。它僅適用於系統應用程序。 – sMiLo

+0

什麼是UserHandle.USER_CURRENT參數? –