安卓监听手机USB接口拔插警报广播

安卓监听手机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存放警报声音。如下图:
安卓监听手机USB接口拔插警报广播_第1张图片
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();
            }
        }
    }

}

这些用上后,你可以任何地方来注册这个广播了,商场展销直接后台开启监听。

你可能感兴趣的:(安卓-csdn)