Android外付け記憶装置状態判定-USBとSDカード接続状態
5374 ワード
プロジェクトでUSBの接続状態を得るには、3.1以前のバージョンでACTION_UMS_CONNECTED放送は、携帯電話が大容量モードに入ったことを示しているが、USBが接続されているかどうかはメッセージがない.3.1以上のバージョンにはandroidが含まれています.hardware.usbは、対応するAPIもありません.batterymanagerから入手できます
intent.getIntExtra(「plugged」,0)で得られた値はそれぞれ:
0:切断
1:USB接続
2:充電器を接続
----------------------------------------------------------------------------------------------------------------------------------------------
以上が放送受信外付けメモリの挿抜状態である.また、プログラム起動時にusbとsdcardが存在するかどうかを判断する.
最近、複数のストレージデバイスを同時に認識できるかどうかという質問がありますが、私は考えを提供しています.試したことがありません.
Androidブロードキャストでストレージデバイスを挿入すると、そのintentにdataがあり、メソッドgetDataString()でデータを取得すると、その中にこのデバイスのパスがあることがわかります.自分の必要に応じてパスを切り取り、それに基づいて異なるストレージデバイスを識別します.
String path=intent.getDataString();
path=path.substring(11)+"/";//path=file:///mnt/sdcard/external_sdcard
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