增加Android下spinner控件的點擊下拉列表自動更新事件並實例應用–USB攝像頭在spinner內下拉更新(一)
轉載註明:http://blog.csdn.net/hubbybob1/article/details/57492419
根據上一篇的內容,本文介紹帶有點擊下來列表自動更新的spinner的控件的使用方法,本程序是實現Android下USB攝像頭的VID與PID的查看查找功能,主要是通過spinner實時的列出熱插拔USB攝像頭的VID和PID。
首先來介紹一下如何查找USB攝像頭,usb設備的查詢採用的是usbmanager
private UsbManager usbManager,usbManager1;
private UsbDevice usbDevice,usbDevice1;
usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);//獲取USB服務
//獲取USB的map,得到usb設備列表,這個列表不包括usb鍵盤和鼠標
HashMap<String, UsbDevice> map = usbManager.getDeviceList();
Collection<UsbDevice> usbDevices = map.values();
Iterator<UsbDevice> usbDeviceIter = usbDevices.iterator();
//通過哈希表遍歷USB設備
while (usbDeviceIter.hasNext()){
ud = usbDeviceIter.next();
//VendorID 和 ProductID 十進制
//Log.e("", "Name: " + ud.getDeviceName());
if(239 ==ud.getDeviceClass() && 2 == ud.getDeviceSubclass()){
// Log.e("device","find camera"); //bhw
vid = ud.getVendorId();
pid = ud.getProductId();
Log.e("", "VID = " + ud.getVendorId() +" PID = "+ ud.getProductId());
datas.add(vid + ":" + pid);
}
}
/*這裏要注意查詢的條件是if(239 ==ud.getDeviceClass() && 2 == ud.getDeviceSubclass())
就是說獲取設備類爲239和子類爲2的就是USB攝像頭,其他的設備例如U盤啊觸摸屏啊都是0
*/
需要注意的是 spinner.performClick();spinner.setAdapter(adapter);這兩個語句的位置的寫法,一定要在線程裏面放置,即new Thread(mrunnable).start();內部不然無法在spinner內部顯示出來。
好了貼出源碼:
package com.example.spinnertest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import com.example.spinnertest.ClickControlledSpinner;
import com.example.spinnertest.ClickControlledSpinner.OnClickMyListener;
import android.app.Activity;
import android.content.Context;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.test.PerformanceTestCase;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
public class MainActivity extends Activity {
private ClickControlledSpinner spinner;
private Spinner spinnerTwo;
private ArrayList datas;
private String[] datas1;
private UsbManager usbManager,usbManager1;
private UsbDevice usbDevice,usbDevice1;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
datas = new ArrayList<String>();
usbManager1 = (UsbManager) getSystemService(Context.USB_SERVICE);
UsbDevice ud1= null;
spinner = (ClickControlledSpinner) this.findViewById(R.id.spinner);
spinnerTwo = (Spinner) this.findViewById(R.id.spinnerTwo);
//datas = new String[] {"","","",""};
datas1 = new String[] {"sdadas","dadas","dada","dada"};
//int i,vid1,pid1;
//datas.add("");
/*
HashMap<String, UsbDevice> map1 = usbManager1.getDeviceList();
Collection<UsbDevice> usbDevices1 = map1.values();
Iterator<UsbDevice> usbDeviceIter1 = usbDevices.iterator();
while (usbDeviceIter1.hasNext()){
ud1 = usbDeviceIter.next();
//VendorID 和 ProductID 十進制
Log.e("", "Name: " + ud.getDeviceName());
if(239 ==ud1.getDeviceClass() && 2 == ud1.getDeviceSubclass()){
Log.d("device","find camera"); //bhw
vid1 = ud1.getVendorId();
pid1 = ud1.getProductId();
Log.d("", "VID = " + ud1.getVendorId() +" PID = "+ ud1.getProductId());
datas.add(vid1 + ":" + pid1);
}
}*/
ArrayAdapter<String> adapterTwo = new ArrayAdapter<String>(this,R.layout.my_simple_spinner_self_item, datas);
//Spinner下拉菜單顯示樣式
adapterTwo.setDropDownViewResource(R.layout.my_simple_spinner_self_item);
spinnerTwo.setAdapter(adapterTwo);
//原生態樣式,已android.R.layout.simple_spinner_dropdown_item爲例,其他修改類似
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, datas);
//ArrayAdapter<int> adapter = new ArrayAdapter<int>(this,android.R.layout.simple_spinner_dropdown_item, datas);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
Log.e("device","ZZZZZZZZZZZZZZZZZZZZZZ");
spinner.setSelection(0);
spinner.setOnClickMyListener(new OnClickMyListener() {
@Override
public void onClickm() {
// TODO Auto-generated method stub
//datas.add("dasdasda");
usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
UsbDevice ud= null;
int vid,pid;
datas.clear();//清空列表,每次下拉更新都要清空,不然列表會越來越大
//datas.add(12345);
//datas.add("");
HashMap<String, UsbDevice> map = usbManager.getDeviceList();
Collection<UsbDevice> usbDevices = map.values();
Iterator<UsbDevice> usbDeviceIter = usbDevices.iterator();
while (usbDeviceIter.hasNext()){
ud = usbDeviceIter.next();
//VendorID 和 ProductID 十進制
//Log.e("", "Name: " + ud.getDeviceName());
if(239 ==ud.getDeviceClass() && 2 == ud.getDeviceSubclass()){
// Log.e("device","find camera"); //bhw
vid = ud.getVendorId();
pid = ud.getProductId();
Log.e("", "VID = " + ud.getVendorId() +" PID = "+ ud.getProductId());
datas.add(vid + ":" + pid);
}
}
new Thread(mrunnable).start();
}
});
spinnerTwo.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
Log.i("ddd", "----zz arg2 = " + arg2);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
spinner.setOnItemSelectedListener(new Spinner1ClickListener()); //
}
Handler mhandler = new Handler() {//caozuo
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
spinner.performClick();
spinner.setAdapter(adapter);
//spinner.setOnItemSelectedListener(new Spinner1ClickListener());
}
};
Runnable mrunnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
mhandler.sendEmptyMessageDelayed(0,100);
}
};
}
下面是應用的截圖: