Good afternoon
I am developing a mobile application in android studio in which I must print a ticket via bluetooth to a mobile printer of the CITIZE brand.
I already make the connection to the printer and I already print, but I do not know why it does not keep that connection to the printer, if I leave the activity where I connect to the printer I can not send anything to print that the connection to the printer is disconnected.
I leave my code where I make the bluetooth connection
package mx.com.oncontrol.printer;
import android.app.Activity;
import android.app.ProgressDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.citizen.port.android.BluetoothPort;
import com.citizen.request.android.RequestHandler;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;
/**
* Created by ONC-LAP on 24/11/2016.
*/
public class ConexionBluet extends Activity {
private static final String TAG = "BluetoothConnectMenu";
// Intent request codes
// private static final int REQUEST_CONNECT_DEVICE = 1;
private static final int REQUEST_ENABLE_BT = 2;
ArrayAdapter<String> adapter;
private BluetoothAdapter mBluetoothAdapter;
private Vector<BluetoothDevice> remoteDevices;
private BroadcastReceiver searchFinish;
private BroadcastReceiver searchStart;
private BroadcastReceiver discoveryResult;
private Thread hThread;
private Context context;
// UI
private Button btnlista;
private EditText btAddrBox;
private Button connectButton;
private Button searchButton;
private ListView list;
// BT
//private BluetoothPort bluetoothPort;
private BluetoothPort bluetoothPort;
// Activar Bluetooth en Caso de Estar Inactivo
private void bluetoothSetup()
{
// Initialize
clearBtDevData();
bluetoothPort = BluetoothPort.getInstance();
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null)
{
// Device does not support Bluetooth
return;
}
if (!mBluetoothAdapter.isEnabled())
{
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
}
private static final String dir = Environment.getExternalStorageDirectory().getAbsolutePath() + "//temp";
private static final String fileName = dir + "//BTPrinter";
private String lastConnAddr;
private void loadSettingFile()
{
int rin = 0;
char [] buf = new char[128];
try
{
FileReader fReader = new FileReader(fileName);
rin = fReader.read(buf);
if(rin > 0)
{
lastConnAddr = new String(buf,0,rin);
btAddrBox.setText(lastConnAddr);
}
fReader.close();
}
catch (FileNotFoundException e)
{
Log.i(TAG, "Connection history not exists.");
}
catch (IOException e)
{
Log.e(TAG, e.getMessage(), e);
}
}
private void saveSettingFile()
{
try
{
File tempDir = new File(dir);
if(!tempDir.exists())
{
tempDir.mkdir();
}
FileWriter fWriter = new FileWriter(fileName);
if(lastConnAddr != null)
fWriter.write(lastConnAddr);
fWriter.close();
}
catch (FileNotFoundException e)
{
Log.e(TAG, e.getMessage(), e);
}
catch (IOException e)
{
Log.e(TAG, e.getMessage(), e);
}
}
// clear device data used list.
private void clearBtDevData()
{
remoteDevices = new Vector<BluetoothDevice>();
}
// add paired device to list
private void addPairedDevices()
{
BluetoothDevice pairedDevice;
Iterator<BluetoothDevice> iter = (mBluetoothAdapter.getBondedDevices()).iterator();
while(iter.hasNext())
{
pairedDevice = iter.next();
remoteDevices.add(pairedDevice);
adapter.add(pairedDevice.getName() +"\n["+pairedDevice.getAddress()+"] [Paired]");
}
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.bluetooth_menu);
// Setting
btAddrBox = (EditText) findViewById(R.id.EditTextAddressBT);
connectButton = (Button) findViewById(R.id.ButtonConnectBT);
searchButton = (Button) findViewById(R.id.ButtonSearchBT);
btnlista = (Button)findViewById(R.id.btn_lista);
list = (ListView) findViewById(R.id.ListView01);
context = this;
// Setting
loadSettingFile();
bluetoothSetup();
//Ir a LA LISTA
btnlista.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ConexionBluet.this,MainActivity.class);
startActivity(intent);
}
});
// Connect, Disconnect -- Button
connectButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if(!bluetoothPort.isConnected()) // Connect routine.
{
try
{
btConn(mBluetoothAdapter.getRemoteDevice(btAddrBox.getText().toString()));
}
catch(IllegalArgumentException e)
{
// Bluetooth Address Format [OO:OO:OO:OO:OO:OO]
Log.e(TAG,e.getMessage(),e);
AlertView.showAlert(e.getMessage(), context);
return;
}
catch (IOException e)
{
Log.e(TAG,e.getMessage(),e);
AlertView.showAlert(e.getMessage(), context);
return;
}
}
else // Disconnect routine.
{
// Always run.
btDisconn();
}
}
});
// Search Button
searchButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (!mBluetoothAdapter.isDiscovering())
{
clearBtDevData();
adapter.clear();
mBluetoothAdapter.startDiscovery();
}
else
{
mBluetoothAdapter.cancelDiscovery();
}
}
});
// Bluetooth Device List
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
list.setAdapter(adapter);
addPairedDevices();
// Connect - click the List item.
list.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
BluetoothDevice btDev = remoteDevices.elementAt(arg2);
try
{
if(mBluetoothAdapter.isDiscovering())
{
mBluetoothAdapter.cancelDiscovery();
}
SharedPreferences settings = getSharedPreferences("ONC_Settings", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString("MacImpresora",btDev.getAddress());
editor.commit();
btAddrBox.setText(settings.getString("MacImpresora",""));
btConn(btDev);
}
catch (IOException e)
{
AlertView.showAlert(e.getMessage(), context);
return;
}
}
});
// UI - Event Handler.
// Search device, then add List.
discoveryResult = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
String key;
BluetoothDevice remoteDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if(remoteDevice != null)
{
if(remoteDevice.getBondState() != BluetoothDevice.BOND_BONDED)
{
key = remoteDevice.getName() +"\n["+remoteDevice.getAddress()+"]";
}
else
{
key = remoteDevice.getName() +"\n["+remoteDevice.getAddress()+"] [Paired]";
}
remoteDevices.add(remoteDevice);
adapter.add(key);
}
}
};
registerReceiver(discoveryResult, new IntentFilter(BluetoothDevice.ACTION_FOUND));
searchStart = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
connectButton.setEnabled(false);
btAddrBox.setEnabled(false);
searchButton.setText(getResources().getString(R.string.bt_stop_search_btn));
}
};
registerReceiver(searchStart, new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED));
searchFinish = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
connectButton.setEnabled(true);
btAddrBox.setEnabled(true);
searchButton.setText(getResources().getString(R.string.bt_search_btn));
}
};
registerReceiver(searchFinish, new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED));
}
@Override
protected void onDestroy()
{
try
{
saveSettingFile();
bluetoothPort.disconnect();
}
catch (IOException e)
{
Log.e(TAG, e.getMessage(), e);
}
catch (InterruptedException e)
{
Log.e(TAG, e.getMessage(), e);
}
if((hThread != null) && (hThread.isAlive()))
{
hThread.interrupt();
hThread = null;
}
unregisterReceiver(searchFinish);
unregisterReceiver(searchStart);
unregisterReceiver(discoveryResult);
super.onDestroy();
}
private connTask connectionTask;
// Bluetooth Connection method.
private void btConn(final BluetoothDevice btDev) throws IOException
{
if((connectionTask != null) && (connectionTask.getStatus() == AsyncTask.Status.RUNNING))
{
connectionTask.cancel(true);
if(!connectionTask.isCancelled())
connectionTask.cancel(true);
connectionTask = null;
}
connectionTask = new connTask();
connectionTask.execute(btDev);
}
// Bluetooth Disconnection method.
private void btDisconn()
{
try
{
bluetoothPort.disconnect();
}
catch (Exception e)
{
Log.e(TAG, e.getMessage(), e);
}
if((hThread != null) && (hThread.isAlive()))
hThread.interrupt();
// UI
connectButton.setText(getResources().getString(R.string.dev_conn_btn));
list.setEnabled(true);
btAddrBox.setEnabled(true);
searchButton.setEnabled(true);
Toast toast = Toast.makeText(context, getResources().getString(R.string.bt_disconn_msg), Toast.LENGTH_SHORT);
toast.show();
}
// Bluetooth Connection Task.
class connTask extends AsyncTask<BluetoothDevice, Void, Integer>
{
private final ProgressDialog dialog = new ProgressDialog(ConexionBluet.this);
@Override
protected void onPreExecute()
{
dialog.setTitle(getResources().getString(R.string.bt_tab));
dialog.setMessage(getResources().getString(R.string.connecting_msg));
dialog.show();
super.onPreExecute();
}
@Override
protected Integer doInBackground(BluetoothDevice... params)
{
Integer retVal = null;
try
{
bluetoothPort.connect(params[0]);
lastConnAddr = params[0].getAddress();
retVal = Integer.valueOf(0);
}
catch (IOException e)
{
retVal = Integer.valueOf(-1);
}
return retVal;
}
@Override
protected void onPostExecute(Integer result)
{
if(result.intValue() == 0) // Connection success.
{
RequestHandler rh = new RequestHandler();
hThread = new Thread(rh);
hThread.start();
// UI
connectButton.setText(getResources().getString(R.string.dev_disconn_btn));
list.setEnabled(false);
btAddrBox.setEnabled(false);
searchButton.setEnabled(false);
if(dialog.isShowing())
dialog.dismiss();
Toast toast = Toast.makeText(context, getResources().getString(R.string.bt_conn_msg), Toast.LENGTH_SHORT);
toast.show();
}
else // Connection failed.
{
if(dialog.isShowing())
dialog.dismiss();
AlertView.showAlert(getResources().getString(R.string.bt_conn_fail_msg),
getResources().getString(R.string.dev_check_msg), context);
}
super.onPostExecute(result);
}
}
}
I hope and you can help me