增加Android下spinner控件的点击下拉列表自动更新事件并实例应用--USB摄像头在spinner内下拉更新(二)

增加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);
        }

    };


}

下面是应用的截图:
这里写图片描述
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值