Android外付け記憶装置状態判定-USBとSDカード接続状態

5374 ワード

プロジェクトでUSBの接続状態を得るには、3.1以前のバージョンでACTION_UMS_CONNECTED放送は、携帯電話が大容量モードに入ったことを示しているが、USBが接続されているかどうかはメッセージがない.3.1以上のバージョンにはandroidが含まれています.hardware.usbは、対応するAPIもありません.batterymanagerから入手できます
IntentFilter mIntentFilter = new IntentFilter(); 
 mIntentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); 
 registerReceiver(BtStatusReceiver, mIntentFilter);
 
public BroadcastReceiver BtStatusReceiver = new BroadcastReceiver() // receive broadcast that BT Adapter status change
 {
    @Override
    public void onReceive(Context context, Intent intent)
    {
     String action = intent.getAction();
     if (action.equals(Intent.ACTION_BATTERY_CHANGED))
     {       
      Log.d("Battery", "" + intent.getIntExtra("plugged", 0));
      Toast text = Toast.makeText(context, "ACTION_USB_DEVICE_ATTACHED"+intent.getIntExtra("plugged", 0), Toast.LENGTH_LONG);
         text.show();
         dataview.setText(""+intent.getIntExtra("plugged", 0));
     }
    }      
 };

intent.getIntExtra(「plugged」,0)で得られた値はそれぞれ:
0:切断
1:USB接続
2:充電器を接続
----------------------------------------------------------------------------------------------------------------------------------------------
private final BroadcastReceiver broadcastRec = newBroadcastReceiver(){
     public void onReceive(Context context, Intent intent){
      if(intent.getAction().equals("android.intent.action.MEDIA_MOUNTED"))
      {  
        File file=newFile("/sdcard/card/");
        File file2=newFile("/usb/");
       if(file.exists() && !isSdcard) { //  SD     
        isSdcard=true;
          Log.d("explorer","SDcard is useful!");
          Toast.makeText(context, R.string.SDCardin, Toast.LENGTH_LONG).show();
          btn_sdcard.setEnabled(true);
           
           String strPath="/sdcard/card/";
            
           path_list.AddPathToList(strPath);
           updateFileList();
          }
       elseif(file2.exists() && !isUsb) {  //  usb    
          //
           isUsb=true;
           Log.d("explorer","USB is useful!");
           Toast.makeText(context, R.string.USBin, Toast.LENGTH_LONG).show();
           btn_usb.setEnabled(true);
            
           String strPath="/usb/";
            
            path_list.AddPathToList(strPath);//       usb
            updateFileList();//        
          }
        
        
      }elseif(intent.getAction().equals("android.intent.action.MEDIA_REMOVED")
        ||intent.getAction().equals("android.intent.action.MEDIA_UNMOUNTED")
        ||intent.getAction().equals("android.intent.action.MEDIA_BAD_REMOVAL")){
               
       File file=newFile("/sdcard/card/");
       File file2=newFile("/usb/");
       if(!file.exists() && isSdcard) {   
          Log.d("explorer","SDcard is not useful!");
          Toast.makeText(context, R.string.SDCardout, Toast.LENGTH_LONG).show();
          isSdcard=false;
          btn_sdcard.setEnabled(false);
           if(path_list.GetCurPath().startsWith("/sdcard/")){
         select_list.ClearList();
         path_list.AddPathToList("/");
        }
            
          }
               
       elseif(!file2.exists() && isUsb){   
            
        isUsb=false;
           Log.d("explorer","USB is not useful!");
           Toast.makeText(context, R.string.USBout, Toast.LENGTH_LONG).show();
           btn_usb.setEnabled(false);
            
           if(path_list.GetCurPath().startsWith("/usb/")){
         select_list.ClearList();
         path_list.AddPathToList("/");
        }
          }
        
       updateFileList();
      }
     }
   };

以上が放送受信外付けメモリの挿抜状態である.また、プログラム起動時にusbとsdcardが存在するかどうかを判断する.
private void initList(){
      
      File file=newFile("/sdcard/card/");
         if(file.exists()) {   
          Log.d("explorer","SDcard is useful!");
          isSdcard=true;
          btn_sdcard.setEnabled(true);           
          }else{   
          //       
           isSdcard=false;
           Log.d("explorer","SDcard is no use!");
           btn_sdcard.setEnabled(false);
          }
         String strPath="/";
         File file2=newFile("/usb/");
         if(file2.exists()) {
           
          isUsb=true;
          btn_usb.setEnabled(true);
           if(isSdcard) {
              strPath="/sdcard/card/";                     
     }else{
       strPath="/usb/";                
     }
           
   }else{
   isUsb=false;
   btn_usb.setEnabled(false);
     if(isSdcard) {
       strPath="/sdcard/card/";          
                
     }else{
       strPath="/";        
     }
   }
         path_list.AddPathToList(strPath);
         updateFileList();
   }

最近、複数のストレージデバイスを同時に認識できるかどうかという質問がありますが、私は考えを提供しています.試したことがありません.
Androidブロードキャストでストレージデバイスを挿入すると、そのintentにdataがあり、メソッドgetDataString()でデータを取得すると、その中にこのデバイスのパスがあることがわかります.自分の必要に応じてパスを切り取り、それに基づいて異なるストレージデバイスを識別します.
String path=intent.getDataString();
path=path.substring(11)+"/";//path=file:///mnt/sdcard/external_sdcard