安卓自动识别U盘中APK文件并进行安装操作

这篇博客记录了一个安卓项目中新需求的实现过程——通过U盘进行APK升级。作者最初尝试使用libaums库识别U盘文件系统,但遇到问题。最终,作者找到了一个更简单的方案:直接获取U盘挂载路径,读取APK文件并进行安装。通过监听MEDIA广播获取挂载路径,实现了功能。

最近项目中有个新需求,实现安卓APK的U盘升级。刚开始上网查找方法,踩了个大坑,方式是直接和USB设备建立连接,借助第三方库libaums识别U盘的文件系统,但是最新版的libaums库0.7.5版本在加载时出现各种错误,借助网络大神说的各种方法也没能调试成功,后来换了种实现方法,更简单,轻松解决问题。方法记录如下:

思路:获取U盘的挂载路径,直接读写U盘,读取到U盘中指定APK文件后,安装APK。

1.通过MEDIA广播获取挂载路径

首先在AndroidManifest.xml中,application下注册系统广播
<application ...>
<receiver android:name=".MediaReceiver">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_CHECKING" />
        <action android:name="android.intent.action.MEDIA_MOUNTED" />
        <action android:name="android.intent.action.MEDIA_EJECT" />
        <action android:name="android.intent.action.MEDIA_UNMOUNTED" />

        <data android:scheme="file" />
    </intent-filter>
</receiver>
</application>


然后创建MediaReceiver广播类,获取USB挂载路径
public class MediaReceiver extends BroadcastReceiver {   
    private final static String U_DISK_FILE_NAME = "test.apk";
   
    @Override
    public void onReceive(Context context, Intent intent) {
        switch (intent.getAction()) {
            case Intent.ACTION_MEDIA_CHECKING:
                break;
            case Intent.ACTION_MEDIA_MOUNTED:
                // 获取挂载路径, 读取U盘文件
                Uri uri = intent.getData();
                if (uri != null) {
                    String filePath = uri.getPath();
                    File rootFile = new File(filePath);
                    for (File file : rootFile.listFiles()) {
                        // 文件列表,进行相应操作...
                        if(file.getName().equals(U_DISK_FILE_NAME))
                        {
                            Intent install = new Intent(Intent.ACTION_VIEW);
                            //设置intent的数据类型是应用程序application
                            install.setDataAndType(Uri.parse("file://" + file.toString()),"application/vnd.android.package-archive");
                            //为这个新apk开启一个新的activity栈
                            install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            context.startActivity(install);
                            break;
                        }
                    }
                }
                break;
            case Intent.ACTION_MEDIA_EJECT:
                break;
            case Intent.ACTION_MEDIA_UNMOUNTED:
                break;
        }
    }
}

 以上代码轻松实现安装U盘中APK的功能。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值