我知道我可以使用持续通知来保持我的服务活着,但我有一个持有广播接收器的服务。我不想使用通知来简单地握住我的广播接收器。我也知道我可以在应用程序的清单中注册我的接收器,但我希望用户能够控制接收器是否处于活动状态。
以下是不断重启的服务。
public class DockServiceListener extends Service{
IntentFilter filter;
BroadcastReceiver mReceiver;
public void onCreate() {
super.onCreate();
Toast.makeText(getApplicationContext(), "Receiver started!", Toast.LENGTH_SHOR
filter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
mReceiver = new DockReceiver();
}
public int onStartCommand(Intent intent, int flags, int id) {
super.onStartCommand(intent, START_STICKY, id);
registerReceiver(mReceiver, filter);
return id;
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
很简单。我也知道它可能是android清理但是Facebook Messenger和其他服务怎么没有被关闭?除非我不知道它因为它没有吐司的消息?或者有没有办法只运行onCreate一次?
好吧无论如何,谢谢大家的期待!希望有人可以更好地教育我! :)
编辑:新方法想知道这是否正确?
startBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName dockReceiver = new ComponentName(getApplicationContext(), DockReceiver.class);
pm.setComponentEnabledSetting(dockReceiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
finish();
}
});
stopBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName dockReceiver = new ComponentName(getApplicationContext(), DockReceiver.class);
pm.setComponentEnabledSetting(dockReceiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
finish();
}
});
答案 0 :(得分:1)
我知道我也可以在我的应用程序清单中注册我的接收器,但我希望用户能够控制接收器是否处于活动状态。
然后使用PackageManager
和setComponentEnabledSetting()
启用或停用在清单中注册的BroadcastReceiver
。你不需要用服务浪费用户的RAM来控制“接收器是否有效”。