我有一个带有复选框的活动:如果未选中chekbox,则停止该服务。这是我的活动代码的片段:
Intent serviceIntent = new Intent();
serviceIntent.setAction("com.android.savebattery.SaveBatteryService");
if (*unchecked*){
serviceIntent.putExtra("user_stop", true);
stopService(serviceIntent);
当我停止服务时,我传递参数“user_stop”来说明用户停止它而不是系统的服务(低内存)。
现在我必须在我的服务的void onDestroy中读取变量“user_stop”:
public void onDestroy() {
super.onDestroy();
Intent recievedIntent = getIntent();
boolean userStop= recievedIntent.getBooleanExtra("user_stop");
if (userStop) {
*** notification code ****
但它不起作用!我不能在onDestroy中使用getIntent()!
任何建议?
感谢
西蒙
答案 0 :(得分:6)
我看到两种方法:
第一种方法是简单直接的方法。但它不是很灵活。基本上你做:
另一种方法是更好的方法,但需要更多代码。
final public static string USER_STOP_SERVICE_REQUEST = "USER_STOP_SERVICE".
湾创建一个内部类BroadcastReceiver类:
public class UserStopServiceReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//code that handles user specific way of stopping service
}
}
℃。在onCreate或onStart方法中注册此接收器:
registerReceiver(new UserStopServiceReceiver(), newIntentFilter(USER_STOP_SERVICE_REQUEST));
d。从您想要停止服务的任何地方:
context.sendBroadcast(new Intent(USER_STOP_SERVICE_REQUEST));
请注意,您可以使用此方法通过Intent传递任何自定义参数。
答案 1 :(得分:1)
我不认为依赖onDestroy()是一件好事。您可以采取几种方法。
建议绑定服务,以便您可以在onUnbind http://developer.android.com/guide/topics/fundamentals.html#servlife
其他选项(不确定这是否有效)是将您的变量发布到SharedPreferences并从onDestroy()获取它。 [您需要检查它是否在调试模式或LogCat消息中工作。
答案 2 :(得分:-1)
我在我的应用程序中使用CheckBoxPreference和服务类的onCreate中的getSharedPreference具有相同的设置。选中该复选框即可启动该服务。取消选中会停止服务。
在我的活动中收听并处理首选项:
getPreferenceManager().findPreference("prefEnable").setOnPreferenceClickListener(new OnPreferenceClickListener()
{
// not used: Intent intent = new Intent(this, MyService.class);
@Override
public boolean onPreferenceClick(Preference preference) {
CheckBoxPreference cb = (CheckBoxPreference) preference;
if (cb.isChecked()) {
Log.d(TAG, "User enabled service");
// code to start service
} else {
Log.d(TAG, "User disabled service");
// code to stop service
}
return true;
}
});
在我的服务onCreate中获取我的“prefEnable”首选项:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Boolean isEnabled = preferences.getBoolean("prefEnable", false);
也许在你的onDestroy中,你可以重新使用它并说:
if (isEnabled==false) {
*** notification code ***
答案 3 :(得分:-1)
//您可以用这种简单的方式传递参数: -
Intent serviceIntent = new Intent(this,ListenLocationService.class);
serviceIntent.putExtra("From", "Main");
startService(serviceIntent);
//and get the parameter in onStart method of your service class
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Bundle extras = intent.getExtras();
if(extras == null)
Log.d("Service","null");
else
{
Log.d("Service","not null");
String from = (String) extras.get("From");
if(from.equalsIgnoreCase("Main"))
StartListenLocation();
}
}
Enjoy :)