广播监听USB链接

一、项目清单中注册广播监听USB插拔。有2个意图过滤器,一个是自定义的android:name="myaction"(传送数据到广播类时用的),另一个是只监听USB插拔的android:name="android.hardware.usb.action.USB_STATE"。
     android:name=".DetactUSB"
     android:launchMode="singleTask">
     
     
     

     
     
     

 


二、广播类
public class DetactUSB   extends BroadcastReceiver {
    public static String MYACTION = "myaction";                    //接收自定义action 传送的信息。
    public  static boolean   USBconnected =false;
    @Override
    public void onReceive(Context context, Intent intent) {
                                                                   //abortBroadcast();//当加上这条代码的时候,广播发送到此结束,即第其他广播不会再收到。  
   
        String action = intent.getAction();


        if (action.equals(DetactUSB.MYACTION)) {
                  String name = intent.getStringExtra("name");


                  if(name .equals("ok")){
                  //获取数据做相应处理。
                  }


        }else if (action.equals(DefaultView_Activity.ACTION)) {
       
             USBconnected = intent.getExtras().getBoolean("connected");


             if (USBconnected) {                                  //USB is connected USB已经链接,跳转到Activity中
             
              Intent myIntent = new Intent(context, XXXXXX.class);
              myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              context.startActivity(myIntent);


              }else{                                             //USB no connected   提示USB未连接

                USBconnected=false;
              }

           
        }


    }
}




二、事件类中。 XXXXXX.class需要传送数据到广播中。

                Intent receiveIntent=new Intent();
                receiveIntent.putExtra("name", "ok");

                MyApplication.getContext().sendOrderedBroadcast(receiveIntent, null);






例子:

USB链接后与PC端Socket数据交互线程中

public class MyServerTest implements Runnable {
   public static   Socket client = null;
    public static  ServerSocket serverSocket;
    public static  List socketList = new ArrayList();
    public         Intent receiveIntent;
    public MyServerTest() {
                receiveIntent=new Intent();
                receiveIntent.setAction(DetactUSB.MYACTION);              
    }
    @Override
    public void run() {
        try {
            serverSocket = new ServerSocket(8087);
            //Log.e("TAG", "usb开启服务器启动等待客户端连接");
            while (true) {//持续接收客户端
                receiveIntent.putExtra("name", "ok");
                MyApplication.getContext().sendOrderedBroadcast(receiveIntent, null);
                Log.e("等待客户端", "等待客户端");
                client = serverSocket.accept();//客户端对象
                socketList.add(client);
                Log.e("客户端", "已连接");
                receiveIntent.putExtra("name", "accept");
                MyApplication.getContext().sendOrderedBroadcast(receiveIntent, null);
                doRead(serverSocket,client);
            }
        } catch (IOException e) {
            e.printStackTrace();
           // Log.e("IOException", e.toString());
        }
    }

}



public class DetactUSB   extends BroadcastReceiver {
    public static String MYACTION = "myaction";                    //接收自定义action 传送的信息。
    public  static boolean   USBconnected =false;
    @Override
    public void onReceive(Context context, Intent intent) {
                                                                   //abortBroadcast();//当加上这条代码的时候,广播发送到此结束,即第其他广播不会再收到。  
   
        String action = intent.getAction();


        if (action.equals(DetactUSB.MYACTION)) {
                  String name = intent.getStringExtra("name");


                  if(name .equals("ok")){
                  //获取数据做相应处理。
                  }


        }else if (action.equals(DefaultView_Activity.ACTION)) {
       
             USBconnected = intent.getExtras().getBoolean("connected");


             if (USBconnected) {                                  //USB is connected USB已经链接,跳转到Activity中
             
                                     if (MyServerTest.socketList.size()>0){  //USB每链接一次,XXXXX.class中线程会打开一次8087端口,这个集合用来清空上次打开的端口,避免端口占用。
                                      MyServerTest.socketList.clear();
                                      }
                                       Intent myIntent = new Intent(context, XXXXXX.class);  //USB已经链接,跳转到Activity中
                                       myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                       context.startActivity(myIntent);


            } else {                                                                 //USB no connected   提示USB未连接



                                USBconnected=false;
                                 if(DetactUSB.contextList.size()==0){      

                                //DetactUSB.contextList.集合保存打开的xxxxx.class  当USB链接中断或USB链接失败时,关闭跳转成功时打开的xxxx.class  关闭上次链接打开的端口。
                               Utils.showToast("USB no connected");
                                   }else{
                                Utils.showToast("USB no connected");
                                    getFinish();
                               }
           
        }


    }


 public void getFinish() {
        try {
            if(MyServerTest.socketList.size()>0 ) {
                MyServerTest.client.close();
                MyServerTest.serverSocket.close();
            }else if(MyServerTest.socketList.size()==0 ) {
                    MyServerTest.serverSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        if(DetactUSB.contextList.size()>0){
          
            for(Activity  context1:DetactUSB.contextList){
                context1.finish();
            }


        }
    }



}

更多相关文章

  1. Android(安卓)Binder驱动源码下载地址
  2. android开发新浪微博客户端 完整攻略 [新手必读]
  3. Android(安卓)BroadcastReceiver介绍
  4. Android(安卓)的开源电话/通讯/IM聊天项目全集
  5. fastboot 详解
  6. Android仿人人客户端(v5.7.1)——网络模块时序图
  7. android UDP广播、组播
  8. [置顶] android IPC通信(下)-AIDL
  9. android拦截短信并屏蔽系统的Notification

随机推荐

  1. Android(安卓)ROM开发(一)——Windows下Cyg
  2. Android基础_页面布局_RelativeLayout(相
  3. Android布局优化之Merge Include ViewStu
  4. android的发展
  5. Android(安卓)init language(inti.rc语法
  6. Google推Android新开发语言Sky:流畅度 秒i
  7. StevGuo系列文章翻译之Android系统属性
  8. android动手写控件系列——老猪叫你写相
  9. 舒尔特方格系列一『Android趣味项目』
  10. Android(安卓)使用【AIDL】调用外部服务