我在主要活动的公开场合声明了BluetoothSocket mmSocket;
。
在一个函数中,我为变量赋值,如果连接,我开始一个线程。
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mConnectedThread = new ConnectedThread(mmSocket);
mConnectedThread.start();
我的代码运行正常。
但是,当我在菜单中启动另一个活动时,如果我在5秒内返回主活动线程就可以了,mi应用程序从BT确认。但是如果我在活动B中停留10秒以上,当我返回主活动时,变量mmSocket为空,我的线程被杀死。
Intent i = new Intent(getApplicationContext(), AjustesActivity.class);
i.putExtra("distancia", Math.floor(MetrosRecorridos / 10));
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(i, 3);
任何解决方案?
编辑(2015年7月14日)
在我的服务类中,我有:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//In this part i connected whith Bluetooth.
new Handler().post(new Runnable() {
@Override
public void run() {
byte[] buffer = new byte[2500];
int bytes;
while (true) {
try {
bytes = mmInStream.read(buffer);
String readMessage = new String(buffer, 0, bytes);
sendMessage(readMessage);
} catch (IOException e) { }
}
});
}
private void sendMessage(String Msg) {
Intent intent = new Intent("custom-event-name");
intent.putExtra("message", Msg);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
在我的主要活动中:
@Override
public void onCreate(Bundle savedInstanceState) {
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("custom-event-name"));
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
}
};
当我调试主要活动时,没有收到消息。任何想法?
由于
答案 0 :(得分:1)
将您的代码放入后台服务并在单独的线程中启动它。在系统需要可用空间之前不会删除它。
如果您必须共享从服务到活动的数据,您可以创建新接口并使用回调或创建本地广播接收器并使用bundle发送意图。
清单:
<service
android:name=".yourBluetoothService"
android:exported="false"/>
服务档案:
public class yourBluetoothService extends Service {
@Override
public void onCreate() {
super.onCreate();
// init code
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.v("BluetoothService", "service started");
new Handler().post(new Runnable() {
@Override void run() {
//your code to start service
}
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
编辑(2015年7月14日)
在我的服务类中,我有:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//In this part i connected whith Bluetooth.
new Handler().post(new Runnable() {
@Override
public void run() {
byte[] buffer = new byte[2500];
int bytes;
while (true) {
try {
bytes = mmInStream.read(buffer);
String readMessage = new String(buffer, 0, bytes);
sendMessage(readMessage);
} catch (IOException e) { }
}
});
}
private void sendMessage(String Msg) {
Intent intent = new Intent("custom-event-name");
intent.putExtra("message", Msg);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
在我的主要活动中:
@Override
public void onCreate(Bundle savedInstanceState) {
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("custom-event-name"));
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = intent.getStringExtra("message");
}
};
当我调试主要活动时,没有收到消息。任何想法?
由于