android監聽TF卡插拔事件 判斷

gcwl2016發表於2017-03-16

  如何通過註冊廣播獲知TF插拔事件:

註冊廣播:

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_EJECT);
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addDataScheme("file");
this.registerReceiver(usbReceiver, filter);  
filter.addDataScheme("file");
this.registerReceiver(usbReceiver, filter); 

 

 如何判斷TF、USB是否插入以及獲取路徑:

 通過反射獲取類 StorageManager 中的 getVolumePaths 方法獲取路徑。

private StorageManager mStorageManager;

private static String mInterSD; // 內建sd卡

private static String mExternalSD; // 外接sd卡 1

private static String mUSB; // U盤,外接sd卡2

private String[] mPath;

public void getStorageList() {

    if (mActivity != null) {

        mStorageManager = (StorageManager)             
             mActivity.getSystemService(Activity.STORAGE_SERVICE);

        try {

            mMethodGetPaths = mStorageManager.getClass().getMethod("getVolumePaths");

            mPath = (String[]) mMethodGetPaths.invoke(mStorageManager);

            if (mPath.length > 0) {

                mInterSD= mPath[0];

            }

            if (mPath.length > 1) {

                mExternalSD= mPath[1];

            }

            if (mPath.length > 2) {

                mUSB= mPath[2];

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

public boolean getExternalStorageState() {

    if(TextUtils.isEmpty(EXTERNAL_STORAGE_DIRECTORY)) {

        return false;

    }

    try {

        return "mounted".equals(Environment.getStorageState(new File(mExternalSD)));

    } catch (Exception rex) {

        return false;

    }

}

 

 

 

相關文章