2009-06-15 25 views
10

tôi đã tạo ra một BroadcastReceiver để phát hiện SDCard mount và unmount sự kiện, tuy nhiên, tôi không thể nhận được bất kỳ sự kiện nào cả: đây là AndroidManifest.xml:Android BroadcastReceiver không thể nhận được bất kỳ sự kiện phát sóng

<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> 

Và lớp 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

bất kỳ điều gì đáng ngờ trong logfile? –

+1

Tôi cho rằng bạn cần phải cấp quyền Sử dụng trong Tệp kê khai thử số này

Trả lời

3

các Intent javadoc xác định một hành động khác nhau: giá trị tên. Sử dụng "android.intent.action.MEDIA_MOUNTED" thay vì "android.content.Intent.ACTION_MEDIA_MOUNTED"

+0

Tôi đã thử liên tục chuỗi thực tế, android.intent.action.MEDIA_MOUNTED, nhưng vẫn không thể nhận được chương trình phát sóng. suy nghĩ khác? – user121196

+0

Tôi đã thử tạo thiết bị thu động trong oncreate() trên lớp Activity của tôi, nhưng vẫn không có gì được nhận trong onReceive của SDCardBroadcastReceiver của tôi.

 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

+4

Tôi đang bối rối, nếu điều này không hiệu quả thì tại sao bạn đánh dấu nó là câu trả lời đúng? Câu trả lời của chiuki có đúng không, hay câu trả lời này? –

42

Bạn cũng cần đặt lược đồ dữ liệu thành "tệp".

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

tham khảo: android-developers thread

+0

Tôi chưa bao giờ quản lý để làm cho nó hoạt động với việc xác định trong tệp kê khai, tôi cần đăng ký nó bằng mã. Ti có thể thực hiện công việc này với việc xác định trong tệp kê khai không? – Lukap

+0

Bắt đầu một câu hỏi mới và đăng 'AndroidManifest.xml' của bạn. Tôi sẽ xem qua một chút. – chiuki

+0

Tôi không thể tự tìm ra nguyên nhân nếu không thấy câu trả lời của bạn. – jowett

4

Nếu bạn đăng ký một máy thu phát sóng chương trình, bạn cũng phải thiết lập các chương trình để "tập tin".

IntentFilter filter = new IntentFilter(); 
filter.addAction(Intent.ACTION_MEDIA_MOUNTED); 
filter.addAction(Intent.ACTION_MEDIA_REMOVED); 
filter.addDataScheme("file"); 
mContext.registerReceiver(mExternalStorageReceiver, filter); 
Các vấn đề liên quan