我已经阅读了很多关于这个主题的帖子,但我还没有找到解决方案。 在我的应用程序中,我需要在将文件从USB DRIVE复制到平板电脑后卸载USB驱动器,这样我就可以安全地将其删除而无需使用“设置”菜单。
现在我正在使用这种方法:
Utility.copyDirectory(file,new File(_CURR_FOLDER));
Process su;
su = Runtime.getRuntime().exec("/system/bin/su");
String cmd = "umount" +
" " + SDPath + "\n" + "exit\n";
su.getOutputStream().write(cmd.getBytes());
我在存储设置中得到的是:
总空间0.0 可用0.0
但SD仍然安装。
提前感谢您的帮助。
首先编辑:
有人知道如何使用IMountService吗?我读到了它,也许是解决USB驱动器卸载的正确方法,但在添加classes-full-debug.jar
之后我的项目不再编译了
答案 0 :(得分:1)
这是不可能做到的。许多用户将所有内容(如歌曲,视频,照片)存储在那里。不允许应用程序卸载SD卡,但使用它们存储数据是一个很好的安全决定。
但是您可以将用户发送到设置并且用户可以执行此操作,而不是通过代码
Intent i = new Intent(android.provider.Settings.ACTION_MEMORY_CARD_SETTINGS);
startActivity(i);
打开那个屏幕......
我认为这会有用
答案 1 :(得分:0)
这就是我必须在 Android 6.0.1 上做的事情,希望它与4.2相同。
我必须在编译android之后将库 SDK / out / target / common / obj / JAVA_LIBRARIES / framework_intermediates / classes-full-debug.jar 添加到我的应用程序中。 (我刚刚从here下载了棒棒糖版本,幸好它也适用于棉花糖)
Android工作室会抱怨内存不足错误,这可以通过将以下代码添加到android部分内的build.gradle来解决。
dexOptions {
javaMaxHeapSize "4g"
}
您还需要通过在defaultConfig部分的build.gradle中添加以下行来添加multidex支持。
multiDexEnabled true
在依赖项部分中添加以下行。
compile 'com.android.support:multidex:1.0.0'
在清单内的应用程序部分添加以下行。
android:name="android.support.multidex.MultiDexApplication"
您的apk必须位于 / system / priv-app 目录中并具有以下权限。
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
然后下面的代码应该可以工作。
private void unmount() {
IMountService mountService = getMountService();
try {
if (mountService != null) {
mountService.unmountVolume("/mnt/media_rw/8842-89A4", true, false);
Log.e(TAG,"Unmounted");
} else {
Log.e(TAG, "Mount service is null, can't unmount");
}
} catch (RemoteException ex) {
// Not much can be done
}
}
private synchronized IMountService getMountService() {
if (mMountService == null) {
IBinder service = ServiceManager.getService("mount");
if (service != null) {
mMountService = IMountService.Stub.asInterface(service);
} else {
Log.e(TAG, "Can't get mount service");
}
}
return mMountService;
}