现在有个需求:u盘里面有一个工厂apk,u盘插入android设备后客制化的sdmc apk会接收到ACTION_MEDIA_MOUNTED广播后使用pm.getPackageArchiveInfo(absPath, PackageManager.GET_ACTIVITIES)去获取u盘里面的工厂apk信息,在这个时候突然把u盘拔掉,在系接收到ACTION_MEDIA_EJECT或者ACTION_MEDIA_UNMOUNTED广播后,可以做哪些处理使得U盘可以成功卸载,不会再下次插入的时候系统提示“vold : ForceUnmount failed: Device or resource busy”
时间: 2024-02-18 15:59:22 浏览: 136
可以通过以下步骤来避免出现“vold: ForceUnmount failed: Device or resource busy”错误:
1. 在接收到ACTION_MEDIA_EJECT或ACTION_MEDIA_UNMOUNTED广播后,先停止所有使用该U盘的进程和服务。
2. 然后通过PackageManager获取U盘上工厂apk的包名,并使用如下命令强制停止该应用:
```
adb shell am force-stop <包名>
```
3. 最后卸载U盘:
```
adb shell umount /mnt/usb_storage
adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///mnt/sdcard
```
注意,上述命令需要在root权限下执行,如果设备没有root权限,则只能等待系统自动卸载U盘,或者提示用户手动卸载。
相关问题
我现在需要把Generic.kl从vendor/sdmc/himalaya/us/kb_keylayout/Generic.kl 拷贝到系统的/system/usr/keylayout/Generic.kl。开机后查看这个文件的内容没有被覆盖
您可以使用以下命令将文件从vendor目录复制到系统目录中:
```
adb root
adb remount
adb push vendor/sdmc/himalaya/us/kb_keylayout/Generic.kl /system/usr/keylayout/Generic.kl
```
其中,adb root 和 adb remount 命令将设备切换为 root 用户,并重新挂载文件系统为可读写模式,这样才能复制文件到 /system 目录下。接着,adb push 命令将文件从 vendor 目录复制到系统目录中。
复制完成后,您可以使用以下命令重新启动设备,以确保配置文件生效:
```
adb reboot
```
如果您依然无法看到文件的内容被覆盖,您可以尝试清除系统缓存,方法如下:
1. 进入设备的 recovery 模式,方法因设备而异,一般是按住音量减和电源键。
2. 进入 recovery 后,选择 "Wipe cache partition" 或 "清除缓存分区",等待清除完成。
3. 选择 "Reboot system now" 或 "重新启动系统",等待设备重启。
重启完成后,您可以再次查看文件的内容,确认是否被覆盖。
warning: writing to readonly directory: "vendor/sdmc/himalaya/us/bt_keylayout/Generic.kl"
如果在使用`adb push`命令将文件推送到设备时收到“warning: writing to readonly directory”错误消息,原因可能是您正在尝试将文件写入只读目录。
在Android设备上,某些目录被设置为只读,这意味着您无法向这些目录中写入文件。例如,您无法向`/system`或`/vendor`目录写入文件,因为这些目录是只读的。如果您尝试向这些目录中写入文件,您将收到“readonly directory”错误消息。
如果您必须向只读目录中写入文件,您需要先将目录设置为可写。这可以通过`adb shell`命令以root用户身份执行以下命令来实现:
```
mount -o rw,remount /directory/path
```
将“/directory/path”替换为您要写入文件的目录路径。这将使该目录变为可写,并允许您向其中写入文件。
请注意,修改只读目录的权限可能会对设备造成潜在的安全风险,并可能导致设备不稳定。因此,在尝试修改只读目录之前,请确保您了解可能的风险,并谨慎操作。
阅读全文