跳至主要內容

Android5.1格式化sd卡


Android5.1格式化sd卡

今天下午在做一个格式化的,看了一下系统的API,实现了。分享给大家吧。

权限:

1、声明

   <uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"/>

2、需要系统签名,也就是说放到系统里面编译或者用系统签名来签名。

代码如下:

public void formatSdcard() {
        Observable.create(new ObservableOnSubscribe<Object>() {
            @Override
            public void subscribe(ObservableEmitter<Object> observableEmitter) {
                StorageManager localObject = StorageManager.from(BaseApplication.getAppContext());
                Intent paramView = new Intent("com.android.internal.os.storage.FORMAT_ONLY");
                paramView.setComponent(ExternalStorageFormatter.COMPONENT_NAME);
                StorageVolume[] storageVolumes = localObject.getVolumeList();
                int i = 0;
                while (i < storageVolumes.length) {
                    if (storageVolumes[i].getPath().equals("/storage/sdcard1")) {
                        paramView.putExtra("storage_volume", storageVolumes[i]);
                        BaseApplication.getAppContext().startService(paramView);
                    }
                    i += 1;
                }
            }
        }).subscribeOn(Schedulers.io()).subscribe();
    }

相关的API,直接上代码肯定是跑不了的,看下图吧:

20190520_204332.png
20190520_204332.png

我们看一下爆红的地方:

第一个StorageManager.from(Context context)

20190520_204454.png
20190520_204454.png

第二个:

localObject.getVolumeList()

20190520_204606.png
20190520_204606.png

启动服务,格式化

while (i < storageVolumes.length) {
                    if (storageVolumes[i].getPath().equals("/storage/sdcard1")) {
                        paramView.putExtra("storage_volume", storageVolumes[i]);
                        BaseApplication.getAppContext().startService(paramView);
                    }
                    i += 1;
                }