Last active
August 29, 2015 13:56
-
-
Save frhan/9224931 to your computer and use it in GitHub Desktop.
Bluetooth discovery android
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
android:orientation="vertical" android:layout_width="fill_parent" | |
android:layout_height="fill_parent"> | |
<TextView android:id="@+id/title_paired_devices" | |
android:layout_width="fill_parent" android:layout_height="wrap_content" | |
android:text="My Text" android:visibility="gone" | |
android:background="#666" android:textColor="#fff" | |
android:paddingLeft="5dip" /> | |
<ListView android:id="@+id/paired_devices" | |
android:layout_width="fill_parent" android:layout_height="wrap_content" | |
android:stackFromBottom="true" android:layout_weight="1" /> | |
</LinearLayout> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<TextView xmlns:android="http://schemas.android.com/apk/res/android" | |
android:layout_width="fill_parent" android:layout_height="wrap_content" | |
android:textSize="18sp" android:padding="5dip" /> | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.sel.code; | |
import java.util.Set; | |
import android.app.Activity; | |
import android.bluetooth.BluetoothAdapter; | |
import android.bluetooth.BluetoothDevice; | |
import android.content.Intent; | |
import android.os.Bundle; | |
import android.util.Log; | |
import android.view.View; | |
import android.view.Window; | |
import android.widget.AdapterView; | |
import android.widget.ArrayAdapter; | |
import android.widget.ListView; | |
import android.widget.TextView; | |
import android.widget.AdapterView.OnItemClickListener; | |
public class DeviceListActivity extends Activity | |
{ | |
protected static final String TAG = "TAG"; | |
private BluetoothAdapter mBluetoothAdapter; | |
private ArrayAdapter<String> mPairedDevicesArrayAdapter; | |
@Override | |
protected void onCreate(Bundle mSavedInstanceState) | |
{ | |
super.onCreate(mSavedInstanceState); | |
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); | |
setContentView(R.layout.device_list); | |
setResult(Activity.RESULT_CANCELED); | |
mPairedDevicesArrayAdapter = new ArrayAdapter<String>(this, R.layout.device_name); | |
ListView mPairedListView = (ListView) findViewById(R.id.paired_devices); | |
mPairedListView.setAdapter(mPairedDevicesArrayAdapter); | |
mPairedListView.setOnItemClickListener(mDeviceClickListener); | |
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); | |
Set<BluetoothDevice> mPairedDevices = mBluetoothAdapter.getBondedDevices(); | |
if (mPairedDevices.size() > 0) | |
{ | |
findViewById(R.id.title_paired_devices).setVisibility(View.VISIBLE); | |
for (BluetoothDevice mDevice : mPairedDevices) | |
{ | |
mPairedDevicesArrayAdapter.add(mDevice.getName() + "\n" + mDevice.getAddress()); | |
} | |
} | |
else | |
{ | |
String mNoDevices = "None Paired";//getResources().getText(R.string.none_paired).toString(); | |
mPairedDevicesArrayAdapter.add(mNoDevices); | |
} | |
} | |
@Override | |
protected void onDestroy() | |
{ | |
super.onDestroy(); | |
if (mBluetoothAdapter != null) | |
{ | |
mBluetoothAdapter.cancelDiscovery(); | |
} | |
} | |
private OnItemClickListener mDeviceClickListener = new OnItemClickListener() | |
{ | |
public void onItemClick(AdapterView<?> mAdapterView, View mView, int mPosition, long mLong) | |
{ | |
mBluetoothAdapter.cancelDiscovery(); | |
String mDeviceInfo = ((TextView) mView).getText().toString(); | |
String mDeviceAddress = mDeviceInfo.substring(mDeviceInfo.length() - 17); | |
Log.v(TAG, "Device_Address " + mDeviceAddress); | |
Bundle mBundle = new Bundle(); | |
mBundle.putString("DeviceAddress", mDeviceAddress); | |
Intent mBackIntent = new Intent(); | |
mBackIntent.putExtras(mBundle); | |
setResult(Activity.RESULT_OK, mBackIntent); | |
finish(); | |
} | |
}; | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.sel.code; | |
import java.io.IOException; | |
import java.io.OutputStream; | |
import java.nio.ByteBuffer; | |
import java.util.Set; | |
import java.util.UUID; | |
import android.app.Activity; | |
import android.app.ProgressDialog; | |
import android.bluetooth.BluetoothAdapter; | |
import android.bluetooth.BluetoothDevice; | |
import android.bluetooth.BluetoothSocket; | |
import android.content.Intent; | |
import android.os.Bundle; | |
import android.os.Handler; | |
import android.os.Message; | |
import android.util.Log; | |
import android.view.View; | |
import android.view.Window; | |
import android.view.WindowManager; | |
import android.widget.Button; | |
import android.widget.Toast; | |
public class Main extends Activity implements Runnable { | |
protected static final String TAG = "TAG"; | |
private static final int REQUEST_CONNECT_DEVICE = 1; | |
private static final int REQUEST_ENABLE_BT = 2; | |
Button mScan, mPrint, mDisc; | |
BluetoothAdapter mBluetoothAdapter; | |
private UUID applicationUUID = UUID | |
.fromString("00001101-0000-1000-8000-00805F9B34FB"); | |
private ProgressDialog mBluetoothConnectProgressDialog; | |
private BluetoothSocket mBluetoothSocket; | |
BluetoothDevice mBluetoothDevice; | |
@Override | |
public void onCreate(Bundle mSavedInstanceState) { | |
super.onCreate(mSavedInstanceState); | |
requestWindowFeature(Window.FEATURE_NO_TITLE); | |
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, | |
WindowManager.LayoutParams.FLAG_FULLSCREEN); | |
setContentView(R.layout.main); | |
mScan = (Button) findViewById(R.id.Scan); | |
mScan.setOnClickListener(new View.OnClickListener() { | |
public void onClick(View mView) { | |
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); | |
if (mBluetoothAdapter == null) { | |
Toast.makeText(Main.this, "Message1", 2000).show(); | |
} else { | |
if (!mBluetoothAdapter.isEnabled()) { | |
Intent enableBtIntent = new Intent( | |
BluetoothAdapter.ACTION_REQUEST_ENABLE); | |
startActivityForResult(enableBtIntent, | |
REQUEST_ENABLE_BT); | |
} else { | |
ListPairedDevices(); | |
Intent connectIntent = new Intent(Main.this, | |
DeviceListActivity.class); | |
startActivityForResult(connectIntent, | |
REQUEST_CONNECT_DEVICE); | |
} | |
} | |
} | |
}); | |
mPrint = (Button) findViewById(R.id.mPrint); | |
mPrint.setOnClickListener(new View.OnClickListener() { | |
public void onClick(View mView) { | |
Thread t = new Thread() { | |
public void run() { | |
try { | |
OutputStream os = mBluetoothSocket | |
.getOutputStream(); | |
String BILL = ""; | |
BILL = "\nInvoice No: ABCDEF28060000005" + " " | |
+ "04-08-2011\n"; | |
BILL = BILL | |
+ "-----------------------------------------"; | |
BILL = BILL + "\n\n"; | |
BILL = BILL + "Total Qty:" + " " + "2.0\n"; | |
BILL = BILL + "Total Value:" + " " | |
+ "17625.0\n"; | |
BILL = BILL | |
+ "-----------------------------------------\n"; | |
os.write(BILL.getBytes()); | |
//This is printer specific code you can comment ==== > Start | |
// Setting height | |
int gs = 29; | |
os.write(intToByteArray(gs)); | |
int h = 104; | |
os.write(intToByteArray(h)); | |
int n = 162; | |
os.write(intToByteArray(n)); | |
// Setting Width | |
int gs_width = 29; | |
os.write(intToByteArray(gs_width)); | |
int w = 119; | |
os.write(intToByteArray(w)); | |
int n_width = 2; | |
os.write(intToByteArray(n_width)); | |
// Print BarCode | |
int gs1 = 29; | |
os.write(intToByteArray(gs1)); | |
int k = 107; | |
os.write(intToByteArray(k)); | |
int m = 73; | |
os.write(intToByteArray(m)); | |
String barCodeVal = "ASDFC028060000005";// "HELLO12345678912345012"; | |
System.out.println("Barcode Length : " | |
+ barCodeVal.length()); | |
int n1 = barCodeVal.length(); | |
os.write(intToByteArray(n1)); | |
for (int i = 0; i < barCodeVal.length(); i++) { | |
os.write((barCodeVal.charAt(i) + "").getBytes()); | |
} | |
//printer specific code you can comment ==== > End | |
} catch (Exception e) { | |
Log.e("Main", "Exe ", e); | |
} | |
} | |
}; | |
t.start(); | |
} | |
}); | |
mDisc = (Button) findViewById(R.id.dis); | |
mDisc.setOnClickListener(new View.OnClickListener() { | |
public void onClick(View mView) { | |
if (mBluetoothAdapter != null) | |
mBluetoothAdapter.disable(); | |
} | |
}); | |
}// onCreate | |
@Override | |
protected void onDestroy() { | |
// TODO Auto-generated method stub | |
super.onDestroy(); | |
try { | |
if (mBluetoothSocket != null) | |
mBluetoothSocket.close(); | |
} catch (Exception e) { | |
Log.e("Tag", "Exe ", e); | |
} | |
} | |
@Override | |
public void onBackPressed() { | |
try { | |
if (mBluetoothSocket != null) | |
mBluetoothSocket.close(); | |
} catch (Exception e) { | |
Log.e("Tag", "Exe ", e); | |
} | |
setResult(RESULT_CANCELED); | |
finish(); | |
} | |
public void onActivityResult(int mRequestCode, int mResultCode, | |
Intent mDataIntent) { | |
super.onActivityResult(mRequestCode, mResultCode, mDataIntent); | |
switch (mRequestCode) { | |
case REQUEST_CONNECT_DEVICE: | |
if (mResultCode == Activity.RESULT_OK) { | |
Bundle mExtra = mDataIntent.getExtras(); | |
String mDeviceAddress = mExtra.getString("DeviceAddress"); | |
Log.v(TAG, "Coming incoming address " + mDeviceAddress); | |
mBluetoothDevice = mBluetoothAdapter | |
.getRemoteDevice(mDeviceAddress); | |
mBluetoothConnectProgressDialog = ProgressDialog.show(this, | |
"Connecting...", mBluetoothDevice.getName() + " : " | |
+ mBluetoothDevice.getAddress(), true, false); | |
Thread mBlutoothConnectThread = new Thread(this); | |
mBlutoothConnectThread.start(); | |
// pairToDevice(mBluetoothDevice); This method is replaced by | |
// progress dialog with thread | |
} | |
break; | |
case REQUEST_ENABLE_BT: | |
if (mResultCode == Activity.RESULT_OK) { | |
ListPairedDevices(); | |
Intent connectIntent = new Intent(Main.this, | |
DeviceListActivity.class); | |
startActivityForResult(connectIntent, REQUEST_CONNECT_DEVICE); | |
} else { | |
Toast.makeText(Main.this, "Message", 2000).show(); | |
} | |
break; | |
} | |
} | |
private void ListPairedDevices() { | |
Set<BluetoothDevice> mPairedDevices = mBluetoothAdapter | |
.getBondedDevices(); | |
if (mPairedDevices.size() > 0) { | |
for (BluetoothDevice mDevice : mPairedDevices) { | |
Log.v(TAG, "PairedDevices: " + mDevice.getName() + " " | |
+ mDevice.getAddress()); | |
} | |
} | |
} | |
public void run() { | |
try { | |
mBluetoothSocket = mBluetoothDevice | |
.createRfcommSocketToServiceRecord(applicationUUID); | |
mBluetoothAdapter.cancelDiscovery(); | |
mBluetoothSocket.connect(); | |
mHandler.sendEmptyMessage(0); | |
} catch (IOException eConnectException) { | |
Log.d(TAG, "CouldNotConnectToSocket", eConnectException); | |
closeSocket(mBluetoothSocket); | |
return; | |
} | |
} | |
private void closeSocket(BluetoothSocket nOpenSocket) { | |
try { | |
nOpenSocket.close(); | |
Log.d(TAG, "SocketClosed"); | |
} catch (IOException ex) { | |
Log.d(TAG, "CouldNotCloseSocket"); | |
} | |
} | |
private Handler mHandler = new Handler() { | |
@Override | |
public void handleMessage(Message msg) { | |
mBluetoothConnectProgressDialog.dismiss(); | |
Toast.makeText(Main.this, "DeviceConnected", 5000).show(); | |
} | |
}; | |
public static byte intToByteArray(int value) { | |
byte[] b = ByteBuffer.allocate(4).putInt(value).array(); | |
for (int k = 0; k < b.length; k++) { | |
System.out.println("Selva [" + k + "] = " + "0x" | |
+ UnicodeFormatter.byteToHex(b[k])); | |
} | |
return b[3]; | |
} | |
public byte[] sel(int val) { | |
ByteBuffer buffer = ByteBuffer.allocate(2); | |
buffer.putInt(val); | |
buffer.flip(); | |
return buffer.array(); | |
} | |
} | |
UnicodeFormatter.java | |
package com.sel.code; | |
import java.io.*; | |
public class UnicodeFormatter { | |
static public String byteToHex(byte b) { | |
// Returns hex String representation of byte b | |
char hexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', | |
'a', 'b', 'c', 'd', 'e', 'f' }; | |
char[] array = { hexDigit[(b >> 4) & 0x0f], hexDigit[b & 0x0f] }; | |
return new String(array); | |
} | |
static public String charToHex(char c) { | |
// Returns hex String representation of char c | |
byte hi = (byte) (c >>> 8); | |
byte lo = (byte) (c & 0xff); | |
return byteToHex(hi) + byteToHex(lo); | |
} | |
} // class |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
android:orientation="vertical" android:layout_width="fill_parent" | |
android:layout_height="fill_parent"> | |
<TextView android:layout_width="fill_parent" | |
android:layout_height="wrap_content" android:text="@string/hello" /> | |
<Button android:text="Scan" android:id="@+id/Scan" | |
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> | |
<Button android:text="Print" android:id="@+id/mPrint" | |
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> | |
<Button android:text="Dissable" android:id="@+id/dis" | |
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> | |
</LinearLayout> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment