2009-06-15 85 views
10

我創建一個BroadcastReceiver檢測SD卡安裝和卸載 事件的任何廣播事件,但是,我不能在所有接收任何事件: 這裏的AndroidManifest.xml中:Android的廣播接收器無法接收

<receiver android:enabled="true" android:label="SDCardMountReceiver" android:exported="true" android:name="xxx.broadcasts.SDCardBroadcastReceiver"> 
    <intent-filter> 
     <action android:name="android.content.Intent.ACTION_MEDIA_MOUNTED"></action> 
     <!-- or <action android:name="android.content.Intent.ACTION_MEDIA_UNMOUNTED" />--></intent-filter> 
</receiver> 

而且SDCardMountReceiver類:

public class SDCardBroadcastReceiver extends BroadcastReceiver { 
    public SDCardBroadcastReceiver() { 
     super(); 
     System.err.println("constructor"); 
    } 

    public void onReceive(Context context, Intent intent) { 
     Log.d("SDCardBroadCastReceiver", "receive " + intent.getAction()); 
     System.err.println("jonathan receive " + intent.getAction()); 

    } 
} 
+0

什麼東西在日誌文件中可疑? – 2009-06-15 17:31:29

+1

我想你需要在Manifest文件中給用戶權限 試試這個 2010-06-17 07:15:30

回答

3

Intent的javadoc指定一個不同的動作:名稱值。 使用「android.intent.action.MEDIA_MOUNTED」而不是「android.content.Intent.ACTION_MEDIA_MOUNTED」

+0

我已經嘗試了實際的字符串常量android.intent.action.MEDIA_MOUNTED,但仍然無法接收廣播。其他想法? – user121196 2009-06-15 16:59:40

+0

我已經嘗試在我的Activity類中oncreate()動態創建接收器,但在我的SDCardBroadcastReceiver的onReceive中仍然沒有收到任何東西。

 SDCardBroadcastReceiver myReceiver = new SDCardBroadcastReceiver(); \t IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED); \t filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED); \t registerReceiver(myReceiver, filter); 
user121196 2009-06-15 17:02:41

+4

我很困惑,如果這不起作用,那麼爲什麼你將它標記爲正確答案? chiuki的答案是正確的,還是這個? – 2011-09-26 18:54:09

42

您還需要將數據方案設置爲「文件」。

<intent-filter> 
    <action android:name="android.intent.action.MEDIA_MOUNTED" /> 
    <data android:scheme="file" /> 
    </intent-filter> 

參考:android-developers thread

+0

我從來沒有設法使它在清單中定義,我需要註冊代碼。是否可以通過在清單中定義來完成此工作? – Lukap 2012-02-28 18:27:17

+0

開始一個新問題併發布你的'AndroidManifest.xml'。我會看一看。 – chiuki 2012-02-29 08:47:42

+0

如果沒有看到您的答案,我無法找到原因。 – jowett 2013-06-25 09:32:09

4

如果以編程方式註冊的廣播接收器,你還必須設置方案「文件」。

IntentFilter filter = new IntentFilter(); 
filter.addAction(Intent.ACTION_MEDIA_MOUNTED); 
filter.addAction(Intent.ACTION_MEDIA_REMOVED); 
filter.addDataScheme("file"); 
mContext.registerReceiver(mExternalStorageReceiver, filter);