@H_502_1@任何人都可以告诉我如何通过蓝牙连接手机和打印机在
Android中打印文本文件?
也就是说,如果我点击Android应用程序的打印按钮,打印机必须打印相应的文件.根据我在Google上搜索的知识,但是我找不到任何好的样品.有任何人有至少一个样本android程序来做到这一点,最好是清除我的混乱.
请提出意见
感谢您宝贵的时间!
解决方法
蓝牙打印机Android示例
在您的编辑器中创建一个新的Android项目BlueToothPrinterApp.
在您的编辑器中创建一个新的Android项目BlueToothPrinterApp.
步骤1:
创建主要活动,如下所示
com.example.BlueToothPrinterApp/BlueToothPrinterApp.java package com.example.BlueToothPrinterApp; import android.app.Activity; import android.os.Bundle; import java.io.IOException; import java.io.OutputStream; import android.bluetooth.BluetoothSocket; import android.content.ContentValues; import android.content.Intent; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class BlueToothPrinterApp extends Activity { /** Called when the activity is first created. */ EditText message; Button printbtn; byte FONT_TYPE; private static BluetoothSocket btsocket; private static OutputStream btoutputstream; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); message = (EditText)findViewById(R.id.message); printbtn = (Button)findViewById(R.id.printButton); printbtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { connect(); } }); } protected void connect() { if(btsocket == null){ Intent BTIntent = new Intent(getApplicationContext(),BTDeviceList.class); this.startActivityForResult(BTIntent,BTDeviceList.REQUEST_CONNECT_BT); } else{ OutputStream opstream = null; try { opstream = btsocket.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } btoutputstream = opstream; print_bt(); } } private void print_bt() { try { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } btoutputstream = btsocket.getOutputStream(); byte[] printformat = { 0x1B,0×21,FONT_TYPE }; btoutputstream.write(printformat); String msg = message.getText().toString(); btoutputstream.write(msg.getBytes()); btoutputstream.write(0x0D); btoutputstream.write(0x0D); btoutputstream.write(0x0D); btoutputstream.flush(); } catch (IOException e) { e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); try { if(btsocket!= null){ btoutputstream.close(); btsocket.close(); btsocket = null; } } catch (IOException e) { e.printStackTrace(); } } @Override protected void onActivityResult(int requestCode,int resultCode,Intent data) { super.onActivityResult(requestCode,resultCode,data); try { btsocket = BTDeviceList.getSocket(); if(btsocket != null){ print_bt(); } } catch (Exception e) { e.printStackTrace(); } } }
第2步:
com.example.BlueToothPrinterApp/BTDeviceList.java package com.example.BlueToothPrinterApp; import java.io.IOException; import java.util.Set; import java.util.UUID; import android.app.ListActivity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class BTDeviceList extends ListActivity { static public final int REQUEST_CONNECT_BT = 0×2300; static private final int REQUEST_ENABLE_BT = 0×1000; static private BluetoothAdapter mBluetoothAdapter = null; static private ArrayAdapter<String> mArrayAdapter = null; static private ArrayAdapter<BluetoothDevice> btDevices = null; private static final UUID SPP_UUID = UUID .fromString(“8ce255c0-200a-11e0-ac64-0800200c9a66″); // UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”); static private BluetoothSocket mbtSocket = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle(“Bluetooth Devices”); try { if (initDevicesList() != 0) { this.finish(); return; } } catch (Exception ex) { this.finish(); return; } IntentFilter btIntentFilter = new IntentFilter( BluetoothDevice.ACTION_FOUND); registerReceiver(mBTReceiver,btIntentFilter); } public static BluetoothSocket getSocket() { return mbtSocket; } private void flushData() { try { if (mbtSocket != null) { mbtSocket.close(); mbtSocket = null; } if (mBluetoothAdapter != null) { mBluetoothAdapter.cancelDiscovery(); } if (btDevices != null) { btDevices.clear(); btDevices = null; } if (mArrayAdapter != null) { mArrayAdapter.clear(); mArrayAdapter.notifyDataSetChanged(); mArrayAdapter.notifyDataSetInvalidated(); mArrayAdapter = null; } finalize(); } catch (Exception ex) { } catch (Throwable e) { } } private int initDevicesList() { flushData(); mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (mBluetoothAdapter == null) { Toast.makeText(getApplicationContext(),“Bluetooth not supported!!”,Toast.LENGTH_LONG).show(); return -1; } if (mBluetoothAdapter.isDiscovering()) { mBluetoothAdapter.cancelDiscovery(); } mArrayAdapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1); setListAdapter(mArrayAdapter); Intent enableBtIntent = new Intent( BluetoothAdapter.ACTION_REQUEST_ENABLE); try { startActivityForResult(enableBtIntent,REQUEST_ENABLE_BT); } catch (Exception ex) { return -2; } Toast.makeText(getApplicationContext(),“Getting all available Bluetooth Devices”,Toast.LENGTH_SHORT) .show(); return 0; } @Override protected void onActivityResult(int reqCode,Intent intent) { super.onActivityResult(reqCode,intent); switch (reqCode) { case REQUEST_ENABLE_BT: if (resultCode == RESULT_OK) { Set<BluetoothDevice> btDeviceList = mBluetoothAdapter .getBondedDevices(); try { if (btDeviceList.size() > 0) { for (BluetoothDevice device : btDeviceList) { if (btDeviceList.contains(device) == false) { btDevices.add(device); mArrayAdapter.add(device.getName() + “\n” + device.getAddress()); mArrayAdapter.notifyDataSetInvalidated(); } } } } catch (Exception ex) { } } break; } mBluetoothAdapter.startDiscovery(); } private final BroadcastReceiver mBTReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context,Intent intent) { String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); try { if (btDevices == null) { btDevices = new ArrayAdapter<BluetoothDevice>( getApplicationContext(),android.R.id.text1); } if (btDevices.getPosition(device) < 0) { btDevices.add(device); mArrayAdapter.add(device.getName() + “\n” + device.getAddress() + “\n” ); mArrayAdapter.notifyDataSetInvalidated(); } } catch (Exception ex) { // ex.fillInStackTrace(); } } } }; @Override protected void onListItemClick(ListView l,View v,final int position,long id) { super.onListItemClick(l,v,position,id); if (mBluetoothAdapter == null) { return; } if (mBluetoothAdapter.isDiscovering()) { mBluetoothAdapter.cancelDiscovery(); } Toast.makeText( getApplicationContext(),“Connecting to ” + btDevices.getItem(position).getName() + “,” + btDevices.getItem(position).getAddress(),Toast.LENGTH_SHORT).show(); Thread connectThread = new Thread(new Runnable() { @Override public void run() { try { boolean gotuuid = btDevices.getItem(position) .fetchUuidsWithSdp(); UUID uuid = btDevices.getItem(position).getUuids()[0] .getUuid(); mbtSocket = btDevices.getItem(position) .createRfcommSocketToServiceRecord(uuid); mbtSocket.connect(); } catch (IOException ex) { runOnUiThread(socketErrorRunnable); try { mbtSocket.close(); } catch (IOException e) { // e.printStackTrace(); } mbtSocket = null; return; } finally { runOnUiThread(new Runnable() { @Override public void run() { finish(); } }); } } }); connectThread.start(); } private Runnable socketErrorRunnable = new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(),“Cannot establish connection”,Toast.LENGTH_SHORT).show(); mBluetoothAdapter.startDiscovery(); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0,Menu.FIRST,Menu.NONE,“Refresh Scanning”); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch (item.getItemId()) { case Menu.FIRST: initDevicesList(); break; } return true; } }
步骤3:
RES /布局/ main.xml中
<?xml version=”1.0″ encoding=”utf-8″?> <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”fill_parent” android:layout_height=”fill_parent” android:paddingLeft=”16dp” android:paddingRight=”16dp” > <TextView android:id=”@+id/msgtextlbl” android:layout_width=”match_parent” android:layout_height=”wrap_content” android:text=”Enter Your Message : ” > </TextView> <EditText android:id=”@+id/message” android:layout_width=”fill_parent” android:layout_height=”100dp” android:layout_below=”@+id/msgtextlbl” android:text=”” > </EditText> <Button android:id=”@+id/printButton” android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:layout_below=”@+id/message” android:layout_marginTop=”5dip” android:layout_centerHorizontal=”true” android:text=”Print” > </Button> </RelativeLayout>
步骤4:
现在编辑您的AndroidManifest.xml
AndroidManifest.xml中
<?xml version=”1.0″ encoding=”utf-8″?> <manifest xmlns:android=”http://schemas.android.com/apk/res/android” package=”com.example.BlueToothPrinterApp” android:versionCode=”1″ android:versionName=”1.0″> <application android:label=”@string/app_name” android:icon=”@drawable/ic_launcher”> <activity android:name=”BlueToothPrinterApp” android:label=”@string/app_name”> <intent-filter> <action android:name=”android.intent.action.MAIN” /> <category android:name=”android.intent.category.LAUNCHER” /> </intent-filter> </activity> <activity android:name=”BTDeviceList”></activity> </application> <uses-sdk android:minSdkVersion=”14″ /> <uses-permission android:name=”android.permission.BLUETOOTH”></uses-permission> <uses-permission android:name=”android.permission.BLUETOOTH_ADMIN”></uses-permission> </manifest>
编译并运行此应用程序.输入消息并按打印按钮.
您将看到蓝牙设备列表.选择蓝牙打印机.
检查蓝牙打印机上的打印.