增加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);
}
};
}
下面是应用的截图: