亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Libusb庫在Android下的使用例程

2019-11-11 05:49:07
字體:
來源:轉載
供稿:網友

轉載請注明:http://blog.csdn.net/hubbybob1/article/details/54863662 閱讀本文前清先了解相關基礎內容,操作步驟請閱讀博客:libusb1.0在android內的移植和使用方法 在講解了libusb庫在Android下的移植和基本應用后,下面來講解Libusb的Android工程;

其工程步驟: 1.建立帶有JNI工程的eclipse工程,網上有很多教程 2.根據上一篇博客生成libusb.a庫文件和相關頭文件(libusb.h等),并導入JNI工程. 3.編寫Android.mk,可以通過ndk-build進行編譯C文件到工程里面去如下所示:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_CFLAGS := -D__STDC_CONSTANT_MACROSCROSS_DIR := /opt/gstreamerspice_objs := / $(LOCAL_PATH)/libs/lib/libusb.aLOCAL_SRC_FILES := android-jni-interface.cLOCAL_LDLIBS += $(spice_objs) -llogLOCAL_C_INCLUDES += / $(LOCAL_PATH)/libs/include/libusb / $(CROSS_DIR)/include/glib-2.0 / $(CROSS_DIR)/lib/glib-2.0/include#LOCAL_SHARED_LIBRARIES := libmyaudioLOCAL_MODULE := libxxtestinclude $(BUILD_SHARED_LIBRARY)

4.編寫C文件并進行ndk-build編譯,如下所示:

#include <jni.h>#include <android/log.h>#include <stddef.h>#include "libusb.h"#include <glib.h>#define LOG_TAG "MediaRecorder"#define LOG(...) __android_log_PRint(ANDROID_LOG_DEBUG,LOG_TAG, __VA_ARGS__)//#define FALSE 0JNIEXPORT void JNICALLjava_com_example_testcusejava_Testcusenative_libusbcallfunc(JNIEnv* env, jobject obj){ //openUsbDevice(4703,12587); int rc,r; libusb_device_handle *handle = NULL; libusb_device *device; libusb_context *ctx = NULL; r = libusb_init(&ctx);//啟動libusb jclass class = (*env)->FindClass (env, "com/example/testcusejava/Testcusenative"); jmethodID openUsbDevice = (*env)->GetStaticMethodID(env, class, "openUsbDevice", "(II)I");//GetStaticMethodID GetMethodID,通過jni獲取Java的方法openUsbDevice int fd =(*env)->CallStaticIntMethod(env, class,openUsbDevice ,4703,12587);//CallVoidMethod,CallStaticIntMethod調用openUsbDevice 獲取fd LOG("!!!!!一二三!!!!! fd = %d",fd); __android_log_write(6, "android-service", "Trying to open USB device.get_usb_device_fd"); //rc = libusb_open_fd(device, &handle,fd);//打開usb設備 if (rc != 0) { __android_log_write(6, "channel-usbredir", "Failed to open USB device."); } //libusb_close(handle); libusb_exit(ctx); //結束libusb}

5.編寫Java程序

package com.example.testcusejava;import java.io.IOException;import java.nio.ByteBuffer;import java.util.Collection;import java.util.HashMap;import java.util.Iterator;import com.example.testcusejava.R;import com.example.testcusejava.Testcusenative.MyThread2;import com.example.testcusejava.Testcusenative.MyThread3;import android.app.Activity;import android.app.PendingIntent;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.hardware.usb.UsbDevice;import android.hardware.usb.UsbDeviceConnection;import android.hardware.usb.UsbEndpoint;import android.hardware.usb.UsbInterface;import android.hardware.usb.UsbManager;import android.hardware.usb.UsbRequest;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Toast;//bhw 2016.07.19 epublic class Testcusenative extends Activity { public native void libusbfunc();// 調用native方法 static { System.loadLibrary("xxtest");//加載ndk-build生成的libxxtest.so庫 } private Button button,button2; private UsbManager usbManager; private UsbDevice usbDevice; private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION"; private PendingIntent pendingIntent; static int fd = -1; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case 3: Toast.makeText(Testcusenative.this, "33333333333333333", 0).show(); break; case 4: Toast.makeText(Testcusenative.this, "44444444444444444", 0).show(); break; } } }; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_testcusenative); try { Process process = Runtime.getRuntime().exec("su"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } button = (Button) findViewById(R.id.buttonPlay); usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); registerReceiver(mUsbReceiver, filter); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Log.e("device","call MyThread2 "); new MyThread2().start(); // libusbfunc();// 調用native方法 } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.testcusenative, menu); return true; } public static native void test(); static{ //System.loadLibrary("lianyinbao-jni"); } class MyThread2 extends Thread{ @Override public void run() { // TODO Auto-generated method stub super.run(); try { UsbDevice ud= null; //鏈接到設備的USB設備列表 HashMap<String, UsbDevice> map = usbManager.getDeviceList(); Collection<UsbDevice> usbDevices = map.values(); Iterator<UsbDevice> usbDeviceIter = usbDevices.iterator(); while (usbDeviceIter.hasNext()){ ud = usbDeviceIter.next(); //VendorID 和ProductID 十進制 if(4703 == ud.getVendorId() && 12587 == ud.getProductId()){//vid pid 3141 25409 ; 4703 12587 usbDevice = ud; Log.e("device","find device"); //bhw } //Log.e("device","find device"); //bhw } //檢測USB設備權限受否授權 if(usbManager.haspermission(usbDevice)){ handler.sendEmptyMessage(3); new MyThread3().start(); Log.e("device","usbManager.hasPermission");//bhw }else{ //如果沒有授權就授予權限 handler.sendEmptyMessage(4); usbManager.requestPermission(usbDevice, pendingIntent); //在此Android系統會彈出對話框,選擇是否授予權限 Log.e("device","usbManager.requestPermission"); //bhw } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class MyThread3 extends Thread{ @Override public void run() { // TODO Auto-generated method stub super.run(); Log.e("device","MyThread3");//bhw UsbDeviceConnection connection = usbManager.openDevice(usbDevice); fd = connection.getFileDescriptor();//獲取文件描述符 Log.e("device","MyThread3 "+fd); jnicallfunc();//調用native方法 } } public static int openUsbDevice(int vid, int pid) throws InterruptedException { Log.e("device","openUsbDevice "+fd); return fd; } private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.e( "action", action); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { usbDevice = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { handler.sendEmptyMessage(1) if(usbDevice != null){ new MyThread3().start();//MyThread3 } } else { Log.d("denied", "permission denied for device " + usbDevice); } } } } }; }

當編寫完后的運行結果如下圖: 這里寫圖片描述 打印的信息順序為下圖: 這里寫圖片描述 到此主要的程序已經完畢,本程序eclipse的工程代碼下載


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av视频在线免费观看| 亚洲精品久久久久久久久久久久久| 久久亚洲综合国产精品99麻豆精品福利| 91探花福利精品国产自产在线| 亚洲欧美国产高清va在线播| 久久青草福利网站| 日韩的一区二区| 日韩电影免费观看中文字幕| 国产精品亚洲自拍| 久久影视免费观看| 91日本在线视频| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲国产精品热久久| 亚洲女人天堂av| 福利一区视频在线观看| 在线观看久久av| 中文字幕亚洲欧美日韩2019| 久久精品免费电影| 亚洲最大的成人网| 在线免费看av不卡| 国产91在线高潮白浆在线观看| 日韩精品中文字| 成人网中文字幕| 亚洲黄色在线看| 永久555www成人免费| 日韩成人高清在线| 国产主播在线一区| 美乳少妇欧美精品| 狠狠色噜噜狠狠狠狠97| 国产成人综合精品在线| 亚洲精品小视频在线观看| 欧美人在线视频| 日韩欧美福利视频| 成人美女免费网站视频| 亚洲欧美激情一区| 国产精品视频久久久| 久久国内精品一国内精品| 国产美女久久精品| 日本不卡免费高清视频| 欧美日韩裸体免费视频| 久久久www成人免费精品张筱雨| 91亚洲精品视频| 国产成+人+综合+亚洲欧洲| 欧美日韩国产页| 国产激情久久久久| 欧美日韩国产91| 欧美激情精品久久久| 欧美特级www| 大荫蒂欧美视频另类xxxx| 精品久久久香蕉免费精品视频| 亚洲第一色在线| 欧美高清视频在线播放| 欧美在线激情视频| www.欧美视频| 亚洲已满18点击进入在线看片| 国产免费一区视频观看免费| 91极品女神在线| 久久久久久久久综合| 亚洲一区美女视频在线观看免费| 日韩av综合中文字幕| 日本aⅴ大伊香蕉精品视频| 欧美xxxx做受欧美.88| 国产91色在线播放| 疯狂做受xxxx欧美肥白少妇| 亚洲国模精品私拍| 久久久999成人| 欧美另类暴力丝袜| 国产激情999| 中文字幕一区二区精品| 国产精品人成电影在线观看| 亚洲天堂影视av| 中文一区二区视频| 国产精品久久久久久久av大片| 国产免费观看久久黄| 国产美女主播一区| 国产在线98福利播放视频| 91国内产香蕉| 国产欧美日韩精品在线观看| 亚洲永久在线观看| 国产精品福利在线观看| 欧美激情一级精品国产| 成人福利网站在线观看| 国产精品欧美日韩一区二区| 国产精品手机播放| 啊v视频在线一区二区三区| 亚洲va欧美va在线观看| 午夜精品久久久久久久99热| 97超级碰碰人国产在线观看| 欧美黑人性生活视频| 久久精品一偷一偷国产| 欧美日韩另类字幕中文| www.日本久久久久com.| 在线电影中文日韩| 国产成人精品日本亚洲专区61| 美女国内精品自产拍在线播放| 久久久精品一区二区三区| 国产亚洲美女精品久久久| 日韩中文字幕视频在线| 国内精品久久久久| 亚洲精品网站在线播放gif| 日本成熟性欧美| 亚洲精品久久久一区二区三区| 亚洲伦理中文字幕| 欧美大片免费观看在线观看网站推荐| 久久久国产精品一区| 久久亚洲影音av资源网| 亚洲第一视频在线观看| 午夜精品久久久久久久男人的天堂| 亚洲最大成人在线| 日韩av影院在线观看| 日本精品视频在线播放| 91国语精品自产拍在线观看性色| 成人网在线观看| 精品电影在线观看| 亚洲视频在线观看视频| 国语自产精品视频在线看一大j8| 亚洲电影在线看| 国产精品成人久久久久| 欧美一级bbbbb性bbbb喷潮片| 精品免费在线视频| 欧美在线不卡区| 在线电影欧美日韩一区二区私密| 亚洲伊人成综合成人网| 日韩在线观看免费高清| 国产美女直播视频一区| 欧美精品aaa| 国产精品69av| 国产精品免费一区二区三区都可以| 国产精品最新在线观看| 国产精品第100页| 欧美激情中文网| 国产精品免费观看在线| 欧美视频二区36p| 亚洲激情视频在线播放| 91理论片午午论夜理片久久| 韩曰欧美视频免费观看| 欧美激情精品久久久久久免费印度| 亚洲最大成人在线| 欧美多人乱p欧美4p久久| 日本精品性网站在线观看| 精品国产91久久久| 亚洲精品大尺度| 欧美—级a级欧美特级ar全黄| 国产性猛交xxxx免费看久久| 亚洲福利视频久久| 精品国产91久久久久久老师| 色天天综合狠狠色| 波霸ol色综合久久| 精品国产1区2区| 精品人伦一区二区三区蜜桃免费| 国产不卡av在线免费观看| 国产福利精品av综合导导航| 欧美在线视频网| 亚洲r级在线观看| 永久免费看mv网站入口亚洲| 成人午夜激情网| 色综合天天狠天天透天天伊人| 久久久久久亚洲精品中文字幕| 国产精品电影网| 91色在线视频| 日韩在线欧美在线| 午夜精品久久久久久久男人的天堂| 亚洲精品免费网站| 国产一区二区香蕉|