安卓监听手机USB接口拔插警报广播
很多场景我们都是需要监听手机拔插,手机都会自带一个广播去监听,我们手机充电,手机接入电脑的时候,一般都会有个小小的震动。在商场上,人多混杂,手机插在USB上,一旦有人想打手机的主意的话,如果没有什么警报措施的话,很容易被盗的。接下来看安卓知识。
既然是监听手机自身的广播,那么,首先我们得知道是那一个广播,看代码。
1、这个是我们所监听的广播,自定义一个UsbStateReceiver,Action指定为
android:name=”android.hardware.usb.action.USB_STATE”
<receiver android:name="com.example.usb.UsbStateReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.hardware.usb.action.USB_STATE" />
</intent-filter>
</receiver>
2、在清单文件配置好后,我们做的警报无非就是发出警报的声音,和手机震动之类的。那么我们首先准备警报声音资源。在res文件下建一个文件夹raw存放警报声音。如下图:
3、我们这个时候将用起来这个声音文件以及震动,会想到这个时候需要哪些权限呢,百度、谷歌搜索了下,看下面权限。
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
上面的权限是使用手机震动和播放音效的时候用的。准备工作做好了,接下来做广播的核心编码了。
4、话不多说了,直接看代码吧:
/**
* usb检测广播
*
* @author jian
*
*/
public class UsbStateReceiver extends BroadcastReceiver {
private Vibrator vibrator;// 手机震动
private MediaPlayer mPlayer;//音乐播放
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
if (action.equals("android.hardware.usb.action.USB_STATE")) {
if (intent.getExtras().getBoolean("connected")) {
// usb 插入
vibrator.cancel();// 停止震动
Toast.makeText(context, "...插入", Toast.LENGTH_LONG).show();
if (mPlayer != null) {
if (mPlayer.isPlaying()) {
mPlayer.pause();// 暂停
mPlayer.stop();//停止
mPlayer.release();//释放
mPlayer = null;//
Toast.makeText(context, "...stoping", Toast.LENGTH_LONG).show();
}
Toast.makeText(context, "...playing", Toast.LENGTH_LONG).show();
}
} else {
if (mPlayer == null) {
mPlayer = MediaPlayer.create(context, R.raw.mp);
mPlayer.setLooping(true);// 可循环
mPlayer.start();
}
/*
* usb 拔出 想设置震动大小可以通过改变pattern来设定,如果开启时间太短,震动效果可能感觉不到
*/
long[] pattern = { 100, 400, 100, 400 }; // 停止 开启 停止 开启
vibrator.vibrate(pattern, 2); // 重复两次上面的pattern 如果只想震动一次,index设
new Thread() {
public void run() {
try {
sleep(600000);// 震动5秒钟停止震动
vibrator.cancel();// 停止震动
mPlayer.stop();// 停止音乐
mPlayer.release();
mPlayer = null;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
}
}
}
这些用上后,你可以任何地方来注册这个广播了,商场展销直接后台开启监听。