2014-03-04 207 views
9

誰能告訴我如何連接移動通過藍牙打印機打印文本文件中的Android?如何在android中通過藍牙連接手機和打印機?

也就是說,如果我從Android應用程序中單擊打印按鈕,打印機必須打印相應的文件。根據我的知識,我已經在Google中搜索它,但我找不到任何好的樣本來執行它有任何人有至少一個示例Android程序來做到這一點,這將是更好的清除我的混亂。

建議請。 感謝您寶貴的時間!

+0

prabu你試過用其他語言嗎?像英語除外?你是否用其他語言打印? –

+0

你見過[this](http://stackoverflow.com/questions/21070980/android-app-to-print-from-a-bluetooth-printer)SOF問題。檢查出。他說,在回答這個問題之後,他可以毫無問題地寫下來。 – osayilgan

回答

13

藍牙打印機Android示例 在您的編輯器中創建一個新的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, int resultCode, Intent intent) { 
super.onActivityResult(reqCode, resultCode, 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步:

編輯您的main.xml文件,並粘貼如下代碼。

RES /佈局/ main.xml中

<?xml version=」1.0″ encoding=」utf-8″?> 
<RelativeLayout xmlns:android=」http://schemas.android.com/apk/res/android&#8221; 
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&#8221; 
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> 

編譯並運行此應用程序。輸入消息並按打印按鈕。

您將看到藍牙設備列表。選擇bluettoth打印機。

檢查您的藍牙打印機上的打印。

here is the CODE Reference...

+1

...謝謝它的正常工作:) – Rohith

+1

謝謝@naveedahmad ..救了我很多時間。 – jyomin

+0

沒有藍牙可能嗎? –