Android4.4中拒绝发送Intent.ACTION_MEDIA_MOUNTED扫描SD卡的广播

通常在我们的项目中,可能会遇到写本地文件,最常用的就是图片文件,在这之后需要通知系统重新扫描SD卡,
在Android4.4之前也就是以发送一个Action为“Intent.ACTION_MEDIA_MOUNTED”的广播通知执行扫描。如下:

this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

但在Android4.4中,则会抛出以下异常:

W/ActivityManager(  498): Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=2269, uid=20016
那是因为Android4.4中限制了系统应用才有权限使用广播通知系统扫描SD卡。

解决方式:
使用MediaScannerConnection执行具体文件或文件夹进行扫描。

MediaScannerConnection.scanFile(this, new String[]{Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath() + "/" + fileName}, null, null);


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Android系统可以通过监听广播来实现对蓝牙耳机事件的监听,其最常用的广播android.intent.action.MEDIA_BUTTON。 当用户按下蓝牙耳机上的按钮时,系统会发送广播,应用程序可以通过注册广播接收器来接收此广播并执行相应的操作。 以下是一个简单的示例代码,演示如何注册广播接收器以监听蓝牙耳机事件: ``` public class BluetoothHeadsetReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_MEDIA_BUTTON)) { KeyEvent event = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event != null && event.getAction() == KeyEvent.ACTION_DOWN) { // 处理耳机按钮按下事件 // ... } } } } ``` 在上述代码,我们创建了一个广播接收器BluetoothHeadsetReceiver,并在其实现了onReceive方法。当收到android.intent.action.MEDIA_BUTTON广播时,我们从Intent获取键事件,并判断是否为按下事件。如果是按下事件,则可以执行相应的操作。 最后,我们需要在Activity或Service注册广播接收器,如下所示: ``` BluetoothHeadsetReceiver receiver = new BluetoothHeadsetReceiver(); IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON); registerReceiver(receiver, filter); ``` 在上述代码,我们创建了一个BluetoothHeadsetReceiver对象,并将其注册为广播接收器,同时指定了要监听的广播类型为android.intent.action.MEDIA_BUTTON。 这样,我们就可以通过注册广播接收器来监听蓝牙耳机事件,实现一些类似音乐播放器暂停、继续等操作。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值