2016-03-14 4 views
1

Я застреваю при работе с BroadCastReceiver, в котором он вызывается только при включении или перезагрузке устройства. Я подключаю USB-устройство с помощью кабеля OTG. Система Android, показывающая USB-вставленный значок каждый раз, но мое приложение не получает никакого события.USB-ресивер, вызывающий только при загрузке

Сообщите мне, что я делаю неправильно.

У меня есть приложение, которое имеет только BroadcastReceiver, как показано ниже.

public class MountReceiver extends BroadcastReceiver { 

private static final String TAG = MountReceiver.class.getSimpleName(); 

@Override 
public void onReceive(Context context, Intent intent) { 

    String actionName = intent.getAction(); 
    Toast.makeText(context.getApplicationContext() 
      , "on Receive", Toast.LENGTH_LONG).show(); 
    extractAllDataFromIntent(intent, context); 
    boolean isMounted; 
    if (actionName.equals("android.intent.action.MEDIA_MOUNTED")) { 
     isMounted = true; 
    } else { 
     // actionName.equals("android.intent.action.MEDIA_UNMOUNTED" 
     isMounted = false; 
    } 
} 

private void extractAllDataFromIntent(Intent intent, Context context) { 

    Bundle bundle = intent.getExtras(); 
    if (bundle != null) { 
     Set<String> keys = bundle.keySet(); 
     Iterator<String> it = keys.iterator(); 
     Log.e(TAG, "Dumping Intent start"); 
     StringBuilder msg = new StringBuilder(); 
     msg.append(TAG + " Seprate app"); 
     while (it.hasNext()) { 
      String key = it.next(); 
      Log.e(TAG, "[" + key + "=" + bundle.get(key) + "]"); 
      msg.append("[" + key + "=" + bundle.get(key) + "]"); 
     } 
     Log.e(TAG, "Dumping Intent end"); 
     Toast.makeText(context.getApplicationContext() 
       , msg, Toast.LENGTH_LONG).show(); 
     //Toast.makeText(context, msg, Toast.LENGTH_LONG).show(); 
    } 
} 
} 

У меня есть запись для этого приемника следующим образом.

<receiver 
     android:name="com.example.manmohan.mountreceiverdemo.MountReceiver" 
     android:enabled="true"> 

     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 


      <action android:name="android.intent.action.MEDIA_MOUNTED" /> 
      <action android:name="android.intent.action.MEDIA_UNMOUNTED" /> 
      <action android:name="android.intent.action.MEDIA_REMOVED" /> 
      <action android:name="android.intent.action.MEDIA_EJECT" /> 
      <action android:name="android.intent.action.MEDIA_BAD_REMOVAL" /> 

      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" /> 
      <action android:name="android.hardware.usb.action.USB_STATE" /> 

      <data android:scheme="file" /> 
     </intent-filter> 
    </receiver> 

Странный случай я вижу в том, что приемник получает событие изменения WiFi при добавлении обратных вызовов изменения состояния Wi-Fi, но до сих пор нет USB событий не становятся получены.

<intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      <action android:name="android.net.wifi.STATE_CHANGE" /> 
     </intent-filter> 

ответ

0

Я считаю, что вы хотите знать, внешний накопитель установлен или нет в любой данный момент времени:

Is there a way to tell if the sdcard is mounted vs not installed at all?

Вы складчину все действия вместе для одного приемника. Попробуйте сохранить отдельный приемник для каждого действия и проверьте, можете ли вы видеть разницу.

Я считаю, что вы добавили разрешение в манифесте:

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

+0

во-первых, я добавил только подключать/отключать действие приемника, а затем добавили остальные в транзакции с несколькими. – Manmohan

+0

Я хочу прочитать USB-устройство в Android-устройстве, и я вижу, что система может видеть его в поддерживаемых устройствах OTG. – Manmohan

+0

обновил мой ответ, надеюсь, что это поможет. –