安卓广播监听USB插拔
2017-11-10 11:18
1201 查看
广播监听USB链接
一、项目清单中注册广播监听USB插拔。有2个意图过滤器,一个是自定义的android:name="myaction"(传送数据到广播类时用的),另一个是只监听USB插拔的android:name="android.hardware.usb.action.USB_STATE"。
<receiver
android:name=".DetactUSB"
android:launchMode="singleTask">
<intent-filter android:priority="99">
<action android:name="myaction" />
</intent-filter>
<intent-filter android:priority="99">
<action android:name="android.hardware.usb.action.USB_STATE" />
</intent-filter>
</receiver>
二、广播类
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<Socket> socketList = new ArrayList<Socket>();
public Intent receiveIntent;
public MyServerTest() {
receiveIntent=new Intent();
receiveIntent.setAction(DetactUSB.MYACTION);
}
@Override
public void run() {
4000
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();
}
}
}
}
一、项目清单中注册广播监听USB插拔。有2个意图过滤器,一个是自定义的android:name="myaction"(传送数据到广播类时用的),另一个是只监听USB插拔的android:name="android.hardware.usb.action.USB_STATE"。
<receiver
android:name=".DetactUSB"
android:launchMode="singleTask">
<intent-filter android:priority="99">
<action android:name="myaction" />
</intent-filter>
<intent-filter android:priority="99">
<action android:name="android.hardware.usb.action.USB_STATE" />
</intent-filter>
</receiver>
二、广播类
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<Socket> socketList = new ArrayList<Socket>();
public Intent receiveIntent;
public MyServerTest() {
receiveIntent=new Intent();
receiveIntent.setAction(DetactUSB.MYACTION);
}
@Override
public void run() {
4000
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();
}
}
}
}
相关文章推荐
- 安卓通过广播实时监听当前网络状况
- 安卓开发中通过广播监听网络状态的代码实现
- 安卓监听手机USB接口拔插警报广播
- 安卓开发之动态注册网络监听广播
- 安卓中对Home键的监听(通过广播的方法)
- 用广播监听安卓设备电量状态
- 安卓短信功能全解:调用系统短信功能发送短信、彩信,使用SmsManager发送短信,并监听发送短信的投递情况,使用广播接收器监听接收的短信。
- 安卓开发最简单的网络广播监听
- 安卓之广播接收者 手机重启监听
- 安卓广播监听WiFi信号强弱的变化
- 安卓广播监听电量
- 安卓平板监听USB插拔
- 安卓通过广播实时监听当前网络状况
- Android网络状态广播监听
- 广播接收者之监听短信并获取内容
- 安卓——监听事件
- 关于网络状态改变监听广播的使用(android不同系统版本会有不同)
- 监听系统开机广播并启动Activity
- 安卓监听屏幕的横竖翻转实现方法
- 监听Package的安装和卸载、电源的连接和断开、网络状态改变广播、解锁广播、屏幕变亮变按广播