我有一个应用程序,该应用程序具有在启动时有条件地启动的服务(基于 xml 中定义的复选框首选项)。我的广播接收器类是这样的:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
public class BootServiceReceiver extends BroadcastReceiver {
private static final String TAG = "tweakmanager";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
SharedPreferences prefLights;
prefLights = PreferenceManager.getDefaultSharedPreferences(context);
if (prefLights.getBoolean("checkbox1", false)) {
Log.i(TAG, "doing nothing...");
} else {
Intent p = new Intent();
p.setAction("app.tweaks.Service");
context.startService(p);
}
}
}
}
请注意,只有在未选中复选框时才应启动服务。默认状态被选中。
现在,在正常操作中,一切正常 - 如果选中复选框,则服务不会启动,如果未选中,则服务会在启动时启动。
问题在于应用程序是否已安装但从未运行...在这种情况下,即使选中了复选框,服务也会在下次启动时启动。我考虑将默认首选项写入接收方可以读取的文件,但我认为这不是最好的解决方案......