2011-08-22 153 views
10

我很困惑。我試圖配置我的應用程序來響應SD卡變得可用/離線,但我的廣播接收器永遠不會被調用!MEDIA_MOUNTED廣播未收到

我可以看到該事件被廣播和其他應用響應:

08-21 23:43:04.405: DEBUG/Ringer(275): -- intent.getAction() =android.intent.action.MEDIA_MOUNTED 

而我的表現已經接收聲明:

<receiver android:name=".Test" android:enabled="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MEDIA_MOUNTED" /> 
     </intent-filter> 
    </receiver> 

我的接收器具有的onReceive方法:

public class Test extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d("#########", "##############################################################"); 
     Log.d("#########", "Obligitory snarky and/or funny logging comment..."); 
     Log.d("#########", "##############################################################"); 
    } 
} 

但& ^%$'ing事情不會導致Test.onReceiv e()開火。有什麼想法嗎?

回答

39

你不可能是認真的。顯然我需要爲數據類型添加一個額外的過濾器。

離開了「未來小子」的答案了...

<receiver android:name=".Test" android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.MEDIA_MOUNTED" /> 
     <data android:scheme="file"/> 
    </intent-filter> 
</receiver> 
+1

看起來官方文檔缺少該方案,這肯定是令人討厭的,因爲他們的代碼實際上不工作。 http://developer.android.com/reference/android/os/Environment.html – smith324

+1

對於動態鏈接接收者的人來說,你可以在你的IntentFilter實例上調用addDataScheme(「file」)。 – dhakim

8

您嘗試添加<data android:scheme="file" />標籤在<intentfilter>,否則做了登記在運行時。
在運行時,創建廣播接收器的一個對象並將它傳遞給registerReceiver(obj)

+0

謝謝,我在發佈前幾分鐘就想出了它。 –

+0

然後您應該將此添加到回答的問題列表中。 – Ronnie

+1

嗯,它是......並且在你提交答案之前。我在15分鐘後添加了一個答案。 –