我正在尝试创建一个使用后台服务连接到BluetoothDevice的应用程序:
的活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
/* ... Create Data Scruct ...*/
dataStruct = new DataStruct();
/* Start Service /*
Intent intentService = new Intent(this,NewService.class);
intentService.putExtra("Data", dataStruct);
startService(intentService);
}
服务:
public class NewService extends Service{
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
dataStruct = intent.getStringExtra("Data");
...
connectBluetooth(dataStruct.getDeviceBT());
return START_NOT_STICKY;
}
public void BTReceive(){
updateDataStruct();
}
}
每次BT连接并收到特殊的通知发生 单击通知时,活动开始(按意图) 它有效,但我想在没有启动Activity布局的情况下启动此应用程序。我想开始服务并在Startup of mobile上启动它。 最后一个问题,当我从“最后一个应用程序列表”中删除应用程序服务停止并且蓝牙通信丢失。 有办法避免它吗? 我想杀死活动但保持活力
谢谢
答案 0 :(得分:1)
*)我想开始只是服务并在Startup of mobile上启动它。?
答案:请使用以下代码在启动时启动服务。
<receiver
android:name="com.xxx.CustomBroadcastReciever"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
使用广播接收器在启动或启动完成后接收意图,然后从那里开始服务。
*)当我从“最后一个应用程序列表”中清除应用程序时服务停止并且蓝牙通信丢失。有办法避免它吗?
答案:使用AlarmManager来避免它。使用重复警报运行5到10秒,从那里你可以调用BroadCastReceiver。所以现在BroadCastReceiver被称为非常5-10秒。检查服务是否仍在运行,否则在BroadCastReceiver中启动它。
Intent intent = new Intent(this, CustomBroadcastReciever.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
intent, PendingIntent.FLAG_CANCEL_CURRENT);
// InexactRepeating allows Android to optimize the energy
// consumption
am.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(), (5 * 1000), pendingIntent);