Android Usb設(shè)備的監(jiān)聽(Dev)外設(shè)端口的判定以及耳機的插拔
最近在公司用到外設(shè),需要判斷接入的外設(shè)的VendorId和ProductId,然后給大家說一下自己的學(xué)習(xí)成果把 ,首先我門可以通過android.hardware.usb.action.USB_STATE
監(jiān)聽自己的Usb連接的設(shè)備,只針對Usb設(shè)備。而想要監(jiān)聽外部設(shè)備的時候卻需要另外的兩個廣播進行監(jiān)聽"android.hardware.usb.action.USB_DEVICE_ATTACHED"
和"android.hardware.usb.action.USB_DEVICE_DETACHED"
。要是想對耳機或者耳機的狀態(tài)進行監(jiān)聽的時候需要的廣播是"android.intent.action.HEADSET_PLUG"
通過
int inttype=intent.getIntExtra("microphone",0)來獲取耳機是否有麥克風(fēng)。inttype==0表示沒有耳機inttype==1表示有耳機
我個人的建議就是將一部分代碼(根據(jù)個人情況而定)放到服務(wù)里面,或者是Application里面。
import com.example.usbusb.utils.ToastUtils; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends Activity { //耳機的廣播 public static final String TAGLISTEN = "android.intent.action.HEADSET_PLUG"; //usb線的廣播 private final static String TAGUSB = "android.hardware.usb.action.USB_STATE"; //外設(shè)的廣播 public static final String TAGIN = "android.hardware.usb.action.USB_DEVICE_ATTACHED"; public static final String TAGOUT = "android.hardware.usb.action.USB_DEVICE_DETACHED"; private boolean BOOLEAN=false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //賽選器 IntentFilter filter = new IntentFilter(); //篩選的條件 filter.addAction(TAGIN); filter.addAction(TAGOUT); filter.addAction(TAGUSB); //注冊廣播 動態(tài)注冊 registerReceiver(receiver, filter); } /** * 創(chuàng)建廣播的類 */ BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); //判斷外設(shè) if (action.equals(TAGIN)) { ToastUtils.shwotoast(context, "外設(shè)已經(jīng)連接"); //Toast.makeText(context, "外設(shè)已經(jīng)連接", Toast.LENGTH_SHORT).show(); } if (action.equals(TAGOUT)) { if (BOOLEAN) { ToastUtils.shwotoast(context, "外設(shè)已經(jīng)移除"); //Toast.makeText(context, "外設(shè)已經(jīng)移除", Toast.LENGTH_SHORT).show(); } } //判斷存儲usb if (action.equals(TAGUSB)) { boolean connected = intent.getExtras().getBoolean("connected"); if (connected) { ToastUtils.shwotoast(context, "USB 已經(jīng)連接"); //Toast.makeText(MainActivity.this, "USB 已經(jīng)連接",Toast.LENGTH_SHORT).show(); } else { if (BOOLEAN) { ToastUtils.shwotoast(context, "USB 斷開"); //Toast.makeText(MainActivity.this, "USB 斷開",Toast.LENGTH_SHORT).show(); } } } //判斷耳機 if (action.equals(TAGLISTEN)) { int intExtra = intent.getIntExtra("state", 0); // state --- 0代表拔出,1代表插入 // name--- 字符串,代表headset的類型。 // microphone -- 1代表這個headset有麥克風(fēng),0則沒有 // int i=intent.getIntExtra("",0); if (intExtra == 0) { if (BOOLEAN) { ToastUtils.shwotoast(context,"拔出耳機"); //Toast.makeText(context, "拔出耳機", Toast.LENGTH_SHORT).show(); } } if (intExtra == 1) { ToastUtils.shwotoast(context, "耳機插入"); //Toast.makeText(context, "耳機插入", Toast.LENGTH_SHORT).show(); int intType = intent.getIntExtra("microphone", 0); if (intType == 0) { ToastUtils.shwotoast(context, "沒有麥克風(fēng)"); //Toast.makeText(context, "沒有麥克風(fēng)" + intType,Toast.LENGTH_SHORT).show(); } if (intType == 1) { ToastUtils.shwotoast(context,"有話筒" ); //Toast.makeText(context, "有話筒" + intType,Toast.LENGTH_SHORT).show(); } } } BOOLEAN=true; } }; /** * 注銷廣播 */ protected void onDestroy() { unregisterReceiver(receiver); }; }
ToastUtils工具類
import android.content.Context; import android.widget.Toast; public class ToastUtils { public static Toast toast=null; private ToastUtils toastUtils=new ToastUtils(); private ToastUtils(){} public static void shwotoast(Context context,String msg){ if (toast==null) { toast=Toast.makeText(context, msg, Toast.LENGTH_SHORT); }else { if (toast!=null) { toast.setText(msg); } } toast.show(); } }
下面的一個就是獲取每一個Id的端口號通過在Usb的廣播里面調(diào)用這個方法判斷是否是自己的設(shè)備,這樣就可完成自己想要的操作了(注意當看到設(shè)備的ID是以0x開頭的是十六位的 然后轉(zhuǎn)化成十進制的數(shù)就能看到自己的東西了)
import java.util.HashMap; import android.annotation.SuppressLint; import android.content.Context; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.util.Log; public class MainActivity extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); HashMap<String, UsbDevice> map = usbManager.getDeviceList(); System.out.println("......................befor...................................."); for(UsbDevice device : map.values()){ System.out.println(".......one..........dName: " + device.getDeviceName()); System.out.println(".......tow.........vid: " + device.getVendorId() + "\t pid: " + device.getProductId()); } System.out.println("........................after.................................."); }
結(jié)果我們都能看到有兩個設(shè)備
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Android 讀取文件內(nèi)容實現(xiàn)方法總結(jié)
這篇文章主要介紹了Android 讀取文件內(nèi)容實現(xiàn)方法的相關(guān)資料,這里提供了幾種方法,大家可以選擇使用,需要的朋友可以參考下2016-10-10Android中一種巧妙的drawable.xml替代方案分享
這篇文章主要給大家介紹了關(guān)于Android中一種巧妙的drawable.xml替代方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09Android 使用版本控制工具時添加忽略文件的方式(詳解)
下面小編就為大家?guī)硪黄狝ndroid 使用版本控制工具時添加忽略文件的方式(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01Android動畫之TranslateAnimation用法案例詳解
這篇文章主要介紹了Android動畫之TranslateAnimation用法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08Android使用Retrofit2.0技術(shù)仿微信發(fā)說說
這篇文章主要為大家詳細介紹了Android使用Retrofit2.0技術(shù)仿微信發(fā)說說,實現(xiàn)拍照,選圖庫,多圖案上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01Android實現(xiàn)中軸旋轉(zhuǎn)特效 Android制作別樣的圖片瀏覽器
這篇文章主要為大家詳細介紹了Android實現(xiàn)中軸旋轉(zhuǎn)特效,制作別樣的圖片瀏覽器,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11