2011-11-11 4 views
5

Có cách nào để phát hiện khi ổ USB flash được cắm vào thiết bị Android không? Tôi có thể phát hiện thẻ SD sử dụng bộ thu phát sóng nhưng nó không hoạt động đối với USB. Tôi muốn tránh bỏ phiếu.Android: Phát hiện ổ flash USB được cắm vào

mã để đăng ký nhận:

private void RegisterUpdateReceiver() 
{ 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction("android.intent.action.MEDIA_MOUNTED"); 
    intentFilter.addDataScheme("file"); 
    myReceiver = new MyReceiver(); 
    this.registerReceiver(myReceiver, intentFilter); 
} 

đang nhận:

public class MyReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     String action = intent.getAction(); 
     if (action.equals("android.intent.action.MEDIA_MOUNTED")) 
     { 
      // react to event 
     } 
} 

Trả lời

2

Android, ở cấp SDK, không có khái niệm của ổ đĩa USB. Không có quy tắc cho nơi họ nên được gắn kết, phát sóng cho khi họ xuất hiện/biến mất, vv Có lẽ một số tiêu chuẩn hóa trong lĩnh vực này sẽ đến trong bản phát hành Android trong tương lai, nhưng nó không phải là có ngày hôm nay.

+0

Logcat hiển thị một số sự kiện liên quan đến gắn kết USB, nhưng tôi không thể phát hiện điều này ở cấp SDK. Âm thanh như những gì bạn đang nói là đúng. W/MountService (931): getVolumeState (/ mnt/usbdisk): Khối lượng không xác định E/VoldConnector (931): Xử lý lỗi '605 Khối lượng trạng thái usbdisk/mnt/usbdisk thay đổi từ 3 (Kiểm tra) thành 4 (Đã gắn)' – Ravi

+0

bất kỳ may mắn ở đây, tôi cũng sử dụng ACTION_MEDIA_REMOVED và người nhận khác có liên quan USB gắn kết và unmount ... nhưng không có gì là làm việc .. nhưng trong dấu nhắc lệnh nó hiển thị usb log? – CoDe

+1

@Shubh: Câu trả lời bằng văn bản vẫn chính xác, như của Android 4.2. – CommonsWare

2

Nếu phát hiện việc gắn và tháo USB sẽ hoạt động "android.hardware.usb.action.USB_DEVICE_ATTACHED" có thể được sử dụng. Đảm bảo định nghĩa của bộ thu và bộ lọc ý định được thêm vào tệp kê khai.