2014-03-04 4 views
9

는 사람이 어떻게 를 연결하는 방법을 말해 줄래 모바일안드로이드에서 텍스트 파일을 인쇄 할 블루투스를 통해 프린터?어떻게 안드로이드에서 블루투스를 통해 모바일과 프린터를 연결하나요?

즉, 안드로이드 응용 프로그램에서 인쇄 버튼을 클릭하면 해당 프린터가 해당 파일을 인쇄해야합니다. 지식에 따라 Google에서 검색했지만 수행 할만한 좋은 샘플을 찾을 수 없습니다. 누군가는 이것을하기 위해 최소한 하나의 샘플 안드로이드 프로그램을 가지고 있는데, 혼돈을 없애는 것이 낫습니다.

제안 사항. 당신의 소중한 시간을 감사합니다! .. 안드로이드 예 이 편집기에서 새로운 안드로이드 프로젝트 BlueToothPrinterApp 만들기

+0

prabu 다른 언어로 시도 했습니까? 영어를 제외한 다른 언어를 좋아하세요? 다른 언어로 인쇄 하시겠습니까? –

+0

[이] (http://stackoverflow.com/questions/21070980/android-app-to-print-from-a-bluetooth-printer) SOF Question을 보았습니까? 그것을 확인하십시오. 그는 그 질문에 주어진 대답 후에 문제없이 그것을 쓸 수 있다고 말한다. – osayilgan

답변

13

블루투스 프린터.

1 단계 :

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 단계 :

2 단계

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(); 
} 
} 
} 

아래와 같은 주요 활동 만들기

을 편집 main.xml에 파일 및 코드 아래에 붙여 넣기 .

고해상도/레이아웃/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 프린터를 선택하십시오.

bluetooth 프린터에서 인쇄를 확인하십시오.

here is the CODE Reference...

+1

... 감사합니다. 작동합니다. :) – Rohith

+1

톤 @naveedahmad에 감사드립니다. 많은 시간을 절약했습니다. – jyomin

+0

블루투스없이 가능합니까? –

관련 문제