android MountService实现------外设挂载及状态监听

本文详细分析了一个关于Android系统中,外设U盘在开机时未被媒体扫描的问题。问题源于开机时未收到ACTION_MEDIA_MOUNTED广播,但设备已正常挂载。通过跟踪MountService的启动和广播接收过程,发现异常出现在getVolumeState方法,由于vold返回的挂载点信息不一致导致。解决方案是避免异常抛出,但可能影响其他依赖挂载点状态查询的场景。
摘要由CSDN通过智能技术生成

事件起因:

        我们的测试报出一个问题,插着U盘开机(我们的机顶盒),多媒体文件未扫描到(U盘里有视频文件还有音乐文件)。说本地的视频文件列表还有音乐列表也是空的。

我是做应用的,兼顾Framework仓库的维护。负责媒体扫描的是MediaProvider.apk。。。义不容辞,这个问题当然是我来负责解决。


问题分析:

        1.首先,我显示查看MediaProvider.apk所对应的源码实现。其源码实现很简单,下面我做一下简单的说明。

        主要的两个类如下:MediaScannerReceiver.java和MediaScannerService.java。

         MediaScannerReceiver.java源码


    private final static String TAG = "MediaScannerReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.d(TAG, "onReceive,action:" + action);

        Uri uri = intent.getData();
        if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
            // 收到开机广播,扫描内部存储
            scan(context, Medi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值