2011-09-26 31 views
5

im đang cố gắng thực hiện điều gì đó tương tự như sau: android: how to listen to "sd card removed unexpectedly" nhưng onReceive của người nghe không bao giờ được gọi, khi tôi không có sdcard gắn hoặc tôi loại bỏ sdcard. Đây là mã.người nghe để xóa thẻ sd

public class MyClass1 extends Activity{ 
    BroadcastReceiver mSDCardStateChangeListener = null; 
    /** Called when the activity is first created. */ 
    public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    mSDCardStateChangeListener = MyClass2.registerSDCardStateChangeListener(this); 
    //some code which needs SDCard and throws unhandled exception if sdcard is not there 

} 

@Override 
    protected void onDestroy() 
    { 
     MyClass2.unRegisterSDCardStateChangeListener(this, mSDCardStateChangeListener); 
     super.onDestroy(); 
    } 



//in MyClass2 
public static BroadcastReceiver registerSDCardStateChangeListener(Activity act) { 

     BroadcastReceiver mSDCardStateChangeListener = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       String action = arg1.getAction(); 
        if(action.equalsIgnoreCase(Intent.ACTION_MEDIA_REMOVED) 
          || action.equalsIgnoreCase(Intent.ACTION_MEDIA_UNMOUNTED) 
          || action.equalsIgnoreCase(Intent.ACTION_MEDIA_BAD_REMOVAL) 
          || action.equalsIgnoreCase(Intent.ACTION_MEDIA_EJECT)) 
        { 
         //i never come here ;(
        //do something 

        } 

      } 
     }; 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(Intent.ACTION_MEDIA_REMOVED); 
     filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED); 
     filter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL); 
     filter.addAction(Intent.ACTION_MEDIA_EJECT); 
     filter.addDataScheme("file"); 
     act.registerReceiver(mSDCardStateChangeListener, filter); 
     return mSDCardStateChangeListener; 
} 

public static void unRegisterSDCardStateChangeListener(Activity act, BroadcastReceiver mSDCardStateChangeListener) 
    { 
     act.unregisterReceiver(mSDCardStateChangeListener); 
    } 

tôi không muốn kiểm tra xem sdcard hiện diện hay không bằng cách if (android.os.Environment.getExternalStorageState(). Equals (android.os.Environment.MEDIA_MOUNTED)) nhưng sử dụng máy thu để thay thế. Bất kỳ trợ giúp là welcome.Thanks !.

+0

bạn có đặt quyền của mình trong tệp kê khai không? – Lukap

+0

@Lukap i có android.permission.READ_PHONE_STATE trong tệp kê khai của tôi –

+0

@ con_9 Bạn nói đúng, xin lỗi. – Caner

Trả lời

3

Ok Tôi nghĩ mã tôi đã đăng có nghĩa là cho hành động & không phải trạng thái & hoạt động tốt.

từ tài liệu:

android.content.Intent.ACTION_MEDIA_REMOVED Broadcast Hành động: Phương tiện bên ngoài đã bị xoá. Đường dẫn đến điểm gắn kết cho phương tiện đã loại bỏ được chứa trong trường Intent.mData .

vì vậy những gì tôi mong đợi (tôi đã sai, hãy xem hai dòng đầu tiên của Câu hỏi) nếu tôi không có SDCard (tức là nó đã được gỡ bỏ trước đó) và sau đó khởi chạy ứng dụng, tôi sẽ nhận cuộc gọi ngụ ý rằng tôi không có thẻ SDCard (Tôi biết âm thanh stpid;)). Mục đích là các hành động (và không phải trạng thái). Nếu tôi xóa sdcard trong khi ứng dụng đang hoạt động, tôi sẽ nhận được cuộc gọi lại. Cảm ơn bạn đã dành thời gian Vegas.

Các vấn đề liên quan