How can I detect a mounted device, such as Pen-Drive, that can be used for storage? How can I find the path for a connected storage device so that I can read files from it?
I used the following broadcast receiver, which received permission to access the installed device:
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbDevice device = (UsbDevice) intent .getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra( UsbManager.EXTRA_PERMISSION_GRANTED, false)) { if (device != null) { // call method to set up device communication Log.d(TAG, "onReceive: "+intent.getExtras().toString()); Log.d(TAG, "onReceive: "+intent.getData()); LinearLayout layoutUsbList = (LinearLayout)findViewById(R.id.layout_usb_list); Button btn = new Button(MainActivity.this); btn.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); layoutUsbList.addView(btn); btn.setText(device.getDeviceId()+"\t"+device.getDeviceName()); Log.d(TAG, "onReceive: "+intent.getExtras().toString()); final String path = intent.getData().getPath(); Log.e(TAG, "onReceive: path of device received from intent: "+ path ); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { File file = new File(path); Toast.makeText(MainActivity.this, "file exists --> "+file.exists()+"", Toast.LENGTH_SHORT).show(); Toast.makeText(MainActivity.this, "file is directory --> "+file.isDirectory()+"", Toast.LENGTH_SHORT).show(); Log.d(TAG, "onClick: file is directory --> "+file.isDirectory()+""); try{ Toast.makeText(MainActivity.this, file.listFiles().length+"", Toast.LENGTH_LONG).show(); }catch(Exception e){ Toast.makeText(MainActivity.this, "error while showing total items", Toast.LENGTH_SHORT).show(); } } }); } } else { Log.d("ERROR", "permission denied for device " + device); } } } } };
Manifest file:
<?xml version="1.0" encoding="utf-8"?>
<uses-feature android:name="android.hardware.usb.host"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:configChanges="keyboard|orientation" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <intent-filter> <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/> </intent-filter> <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter"/> <intent-filter> <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.MEDIA_MOUNTED"/> <data android:scheme="file"/> </intent-filter> </activity> </application>
source share