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

    };


}

下面是應用的截圖:
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章