返回首页
当前位置: 主页>USB开发应用>

android如何实现连接usb口和com的打印机的打印

时间:2018-01-30 20:46来源:USB开发群 作者:USB开发频道 点击:

  

package com.example.myprintertest;

import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

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.os.Build;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface; 织梦内容管理系统
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

@SuppressLint({ "NewApi", "SimpleDateFormat" })
public class MainActivity extends Activity implements OnClickListener {

        private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
        UsbManager usbManager = null;
        UsbDevice ud = null;
        List usbDevicesList = new ArrayList<String>();
        UsbEndpoint end_in, end_out;
        PendingIntent mPendingIntent = null;

        private Button printer_btn;       

dedecms.com


        private Button setVendorId_btn;
        private int vendorId = 6790;// 设备供应商ID

        private String print_txt;// 打印文字
        private byte[] output;
       
        EditText numberId;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                // 获取USB管理器
                usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);

                print_txt = "ggfhghfghfghgfhgf ";
copyright dedecms


                try {
                        output = print_txt.getBytes("GBK");
                } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

                printer_btn = (Button) findViewById(R.id.button1);
                printer_btn.setOnClickListener(this);

       
                setVendorId_btn = (Button) findViewById(R.id.vendor_btn);
                setVendorId_btn.setOnClickListener(this);

织梦好,好织梦


        }

        @SuppressWarnings("deprecation")
        @SuppressLint("NewApi")
        public void getDevice() {

                // UsbManager 中的getDeviceList()获得设备列表,返回的是HashMap
                HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
                Iterator<Entry<String, UsbDevice>> iter = deviceList.entrySet()
                                .iterator();

                if (deviceList != null) {

                        removeDialog(1);

                        if (iter != null) {
dedecms.com


                                while (iter.hasNext()) {
                                        Map.Entry<String, UsbDevice> entry2 = (Map.Entry<String, UsbDevice>) iter
                                                        .next();
                                        System.out.println("---" + entry2.getValue());
                                        /**
                                         * --------------------------供应商ID连接打印机--------------------
dedecms.com

                                         */
                                        //System.out.println("vvvv"+vendorId);
                                        if (entry2.getValue().getVendorId() == vendorId) {
                                                usbDevicesList.add(entry2.getValue());
                                                ud = (UsbDevice) usbDevicesList.get(0);
                                                break;

dedecms.com


                                        }
                                        /**
                                         * ------------------------供应商ID连接打印机----------------------
                                         */

                                }

                                if (ud != null && requestPermission(ud)) {

                                        writePort(ud, output); 内容来自dedecms
                                } else {
                                        Toast.makeText(MainActivity.this, "请连接打印机",
                                                        Toast.LENGTH_SHORT).show();
                                }
                        }

                }
        }

        // 广播接收器
        private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { 内容来自dedecms
                public void onReceive(Context context, Intent intent) {
                        String action = intent.getAction();

                        if (ACTION_USB_PERMISSION.equals(action)) {
                                synchronized (this) {
                                        UsbDevice device = (UsbDevice) intent
                                                        .getParcelableExtra(UsbManager.EXTRA_DEVICE);

                                        if (intent.getBooleanExtra( 织梦好,好织梦
                                                        UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                                                if (device != null) {
                                                        Log.d("PrintDemo", "permission success for device "
                                                                        + device);

                                                        if (ud != null) {
内容来自dedecms


                                                                writePort(ud, output);
                                                        }
                                                }
                                        } else {
                                                Log.d("PrintDemo", "permission denied for device " 内容来自dedecms
                                                                + device);
                                        }
                                }
                        }
                }
        };

        // 请求驱动权限
        @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
        @SuppressLint("NewApi")
        private boolean requestPermission(UsbDevice paramUsbDevice) {

                if (!usbManager.hasPermission(paramUsbDevice)) {

织梦内容管理系统



                        PendingIntent localPendingIntent = PendingIntent.getBroadcast(this,
                                        0, new Intent(ACTION_USB_PERMISSION),
                                        PendingIntent.FLAG_UPDATE_CURRENT);

                        IntentFilter localIntentFilter = new IntentFilter(
                                        ACTION_USB_PERMISSION);
                        this.registerReceiver(this.mUsbReceiver, localIntentFilter);
                        // USB设备请求临时的接入权限
本文来自织梦

                        usbManager.requestPermission(paramUsbDevice, localPendingIntent);

                        return usbManager.hasPermission(paramUsbDevice);
                }
                return true;
        }

        // 打印机打印方法
        @SuppressLint("NewApi")
        public void writePort(UsbDevice usbDev, byte[] printCommand) {

                try {
                        // 连接USB设备
                        UsbDeviceConnection connection = usbManager.openDevice(usbDev);
内容来自dedecms

                        UsbInterface interf = usbDev.getInterface(0);

                        int k = interf.getEndpointCount();
                        for (int m = 0; m < k; m++) {

                                // 中的getEndpoint(index)对于指定的index获得此接口的一个节点,返回一个UsbEndpoint
                                UsbEndpoint localUsbEndpoint = interf.getEndpoint(m);

                                System.out.println("localUsbEndpoint.getDirection()"
                                                + localUsbEndpoint.getDirection()); dedecms.com

                                // getDirection返回的是一个整数,128(USB_DIR_IN)代表in,0(USB_DIR_OUT)代表out
                                if (localUsbEndpoint.getDirection() == 128) {
                                        end_in = localUsbEndpoint;
                                } else if (localUsbEndpoint.getDirection() == 0) {

                                        end_out = localUsbEndpoint;
                                }
                        }

dedecms.com



                        if (end_out != null) {

                                connection.claimInterface(interf, true);

                                System.out.println("end_out" + end_out);
                                // bulkTransfer通过给定的endpoint来进行大量的数据传输,传输的方向取决于该节点的方向,
                                // 传输成果返回传输字节数组的长度,失败返回负数
                                int falg = connection.bulkTransfer(end_out, printCommand,
                                                printCommand.length, 0); dedecms.com
                                if (falg < 0) {
                                        System.out
                                                        .println("localUsbEndpoint:" + end_out.toString());
                                }
                                if (connection != null) {
                                        connection.releaseInterface(interf);
                                        connection.close(); 织梦内容管理系统
                                }
                                interf = null;
                                connection = null;

                        } else {
                                Toast.makeText(MainActivity.this, "找不到设备,请重启android机",
                                                Toast.LENGTH_SHORT).show();
                                if (connection != null) { copyright dedecms
                                        connection.releaseInterface(interf);
                                        connection.close();
                                }
                        }

                } catch (Exception e) {
                        e.printStackTrace();
                        Toast.makeText(MainActivity.this, "供应商ID错误", Toast.LENGTH_SHORT)
                                        .show();
copyright dedecms

                       
                }
        }

        @Override
        public void onClick(View v) {
                // 测试
                switch (v.getId()) {
                case R.id.button1:
                        getDevice();

                        break;
                case R.id.vendor_btn:
                       
                         numberId = new EditText(this);                          织梦内容管理系统
                         numberId.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
                         numberId.setText(vendorId+"");
                        AlertDialog.Builder dialog = new AlertDialog.Builder(
                                        MainActivity.this);
                        dialog.setTitle("设置打印机供应商ID");
                        dialog.setIcon(android.R.drawable.ic_dialog_info);
                        dialog.setView(numberId);
                        dialog.setNegativeButton("取消", null);

织梦好,好织梦


                        dialog.setPositiveButton("确定",
                                        new DialogInterface.OnClickListener() {

                                                @Override
                                                public void onClick(DialogInterface arg0, int arg1) {
                                                        // TODO Auto-generated method stub                                                        dedecms.com
                                                       
                                                        String Id = numberId.getText().toString();
                                                        if(Id.length() != 0){
                                                                vendorId = Integer.parseInt(Id);
                                                                Toast.makeText(MainActivity.this, "设置成功", Toast.LENGTH_SHORT)
dedecms.com

                                                        .show();
                                                        }
                                                       
                                                }

                                        });
                       

内容来自dedecms


                        dialog.show();

                        break;
                }
        }

        /**
         * 获取系统时间
         * */
        private String thisTime() {
                Date curdate = new Date(System.currentTimeMillis());// 获取系统当前时间
                SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(
                                "yyyy-MM-dd  HH:mm:ss");
                return mSimpleDateFormat.format(curdate);

copyright dedecms


        }

}  
织梦内容管理系统






秦华 『上海买保险』上海地区人寿保险资深寿险顾问 上海外籍人士买保险-高端人士医疗办理
服务项目:儿童医疗/子女教育金/养老保险/重大疾病/意外伤害/员工团险/公众责任
免费热线『上海』:13761630213, QQ:107242375, Email:victor.qin@qq.com
选择保险事业 为了爱,为了一份坚定的承诺!MSN:
上海地区请直接拨打本人电话,应约免费上门提供免费保险方案。
Baoxian.ws>>           旅行签证保险、上门办理>>        重大疾病网>>     上海重大疾病一览    
友情链接: 走在上海人寿保险的前端    和讯保险博客    上海投保在线    Shanghai Insurance    秦华的个人简历


顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
图文并茂 我的链接
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
上海高端医疗/住院医疗保险信息
上海保险规划师信息
上海子女教育理财保险信息
上海保险规划师信息
上海女性高端生育保险方案-等待期
上海保险规划师信息
上海三口之家家庭保障方案
上海保险规划师信息
上海女性特色重大疾病保险方案
上海保险规划师信息
上海女性白领理财保险方案
上海保险规划师信息
上海养老理财规划保险方案
上海保险规划师信息
通过网络取得初步咨询
  •    
上海办理-免费咨询送计划书
上海买保险
上海办理-申根签证 出国旅行保险
上海买保险
上海买保险,海外基金,买保险,友邦保险,中国人民健康保险,养老保险,儿童保险,儿童医疗,子女教育金,太平洋保险,医疗保险,工伤保险条例,中国人寿保险,保险公司,中国平安保险,医疗险,进口药,自费药,外籍人士医疗,泰康人寿,英国保诚集团,上海综合保险,国际医疗保险,上海医疗保险,上海社会保险,上海养老保险,上海市综合保险,上海平安保险,上海太平洋保险,和睦家医院,上海综合保险卡,买保险,高端医疗,重大疾病,意外伤害,定期寿险,家庭理财,友邦保险,金茂大厦,少儿互助基金,上海社保,太平洋集团,港安医院