Android usb hostモードでusbの抜き差しを傍受


            。      ,        ,        !

USb hostモードの書面の叙述は私は多く言わないで、私は私の理解を話して、実はusb hostモードは実はコンピュータのusbポートモードで、この情況はあなたがハードウェアの外付けコンピュータのusbポートを変えることができて、元のusbポートの外付けの変換ポートで、例えばOTGです.このときSDの抜き差し放送で
 
  
Intent.ACTION_MEDIA_MOUNTED   //sd   
Intent.ACTION_MEDIA_EJECT   //sd    

USb hostのマウス、uディスクなどの抜き差しは聞こえません.
このときに使う
android.hardware.usb.action.USB_DEVICE_ATTACHED  
android.hardware.usb.action.USB_DEVICE_DETACHED

ネット上では、この2つの放送の記述はすべて千編一律で、実際には2つの放送は静的に傍受することができて、動的に傍受することができて、また設備のフィルタリングを実行することができます.
スタティツクリスニング
他の放送と同じようにAndroidManifestでしか必要ありません.xmlにはこの2つの放送を登録すればいいです
      

            
                
            
            
                
            
            
                
                
            
            
                
                
            
        

最も重要なのは権限を加えることです

そしてactivityで処理します
public class braost extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, Intent intent) {
        String action = intent.getAction();

        if (action.equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {

            Log.e("pangsheng", "           ");

        } else if (action.equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
            Log.e("pangsheng", "           ");

        }
    }
}

動的登録
      IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
        intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
        intentFilter.addDataScheme("file");
        registerReceiver(broadcastRec, intentFilter);
 private final BroadcastReceiver broadcastRec = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {

            String action = intent.getAction();      
            if (action.equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {
                Log.e("pangsheng", "usb attached");
            }
            if (action.equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
                Log.e("pangsheng", "usb unattached ");
            }
        }
    };

デバイスフィルタ
これは実は静的登録で、自分のactivityをカスタマイズして開くことができて、ゲームの設備に多く使って、また弾窓を実現してユーザーに選択させることができます
AndroidManifestでxml対応activityプラス
  
            
                
                        
 
          
  
    
    
    

xmlフォルダで
device_filter.xml
     
                                 
 
  


 
  

activity

    private static final String ACTION_USB_DEVICE_PERMISSION =
            "com.android.accessorydisplay.sink.ACTION_USB_DEVICE_PERMISSION";//        

      IntentFilter filter = new IntentFilter();
        filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
        filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
        filter.addAction(ACTION_USB_DEVICE_PERMISSION);
        mReceiver = new DeviceReceiver();
        registerReceiver(mReceiver, filter);

class DeviceReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
            if (device != null) {
                String action = intent.getAction();
                if (action.equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {
                    Log.e("pangsheng", "");
                } else if (action.equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
                    Log.e("pangsheng", "");
                }   else if (action.equals(UsbManager.ACTION_USB_DEVICE_PERMISSION)) {
                    Log.e("pangsheng", "  ,    ");
                } 
} } }