广播接收器和首选项复选框不能一起工作
Posted
技术标签:
【中文标题】广播接收器和首选项复选框不能一起工作【英文标题】:Broadcast Receiver and Preference Checkbox not working together 【发布时间】:2015-04-15 17:28:26 【问题描述】:感谢任何帮助。
我在清单中有一个广播接收器,当 android:enabled="true" 接收广播并启动服务时。而当它是 android:enabled="false" 时没有接收到广播并且服务没有启动。
这是您在使用 PackageManger 时所期望的,当我尝试将它与我的偏好活动一起使用时,在 android:enabled="true" 或 android:enabled="false" 的情况下该服务一直被调用服务永远不会被调用。在这两种情况下,复选框是否被选中都没有关系。
我认为问题在于偏好活动是如何构建的,因为我尝试过的真/假逻辑被搞砸了。我没有收到任何错误,这让人相信这是 Java 的构建方式。真的想要一些帮助 关于解决这个问题。提前感谢您提供的任何帮助。
这里是偏好 XML 和偏好 Java。
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="CheckBox"
android:id="@+id/CheckBox1"
android:title=" StartUp"
android:summary="Change The CheckBox Status here, it will be saved in
Preference" />
</PreferenceScreen>
下面是Java
package com.collabera.labs.sai;
import java.util.Calendar;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
mport android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.CheckBox;
public class ShowPreferences extends PreferenceActivity implements
OnSharedPreferenceChangeListener
boolean CheckBox;
CheckBox cb;
PreferenceManager pm;
SharedPreferences sp;
Editor editor;
private String CHECKBOX;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.bootpreference);
cb = (CheckBox) findViewById(R.id.CheckBox1);
loadPref();
private void loadPref()
// TODO Auto-generated method stub
SharedPreferences sp =
PreferenceManager.getDefaultSharedPreferences(this);
sp.getBoolean("CHECKBOX", false);
private void savePrefs(String key, boolean value)
SharedPreferences sp =
PreferenceManager.getDefaultSharedPreferences(this);
Editor edit = sp.edit();
edit.putBoolean(CHECKBOX, true);
edit.commit();
public void onClick(View v)
// TODO Auto-generated method stub
savePrefs("CHECKBOX", cb.isChecked());
if (cb.isChecked());
public void pendingIntent()
// TODO Auto-generated method stub
public void onSharedPreferenceChanged(SharedPreferences
sharedPreferences,
String key, boolean cbValue)
// TODO Auto-generated method stub
if(cbValue)
cb.setChecked(true);
Intent myIntent = new Intent(getBaseContext(),
BroadcastServiceReceiver.class);
PendingIntent pendingIntent
= PendingIntent.getBroadcast(getBaseContext(),
0, myIntent, 0);
AlarmManager alarmManager
= (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
long interval = 60 * 1000; //
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), interval, pendingIntent);
PackageManager pm = getPackageManager();
ComponentName compName =
new ComponentName(getApplicationContext(),
BroadcastServiceReceiver.class);
pm.setComponentEnabledSetting(
compName,
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
else
cb.setChecked(false);
Intent myIntent = new Intent(getBaseContext(),
BroadcastServiceReceiver.class);
PendingIntent pendingIntent
= PendingIntent.getBroadcast(getBaseContext(),
0, myIntent, 0);
AlarmManager alarmManager
= (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
alarmManager.cancel(pendingIntent);
PackageManager pm = getPackageManager();
ComponentName compName =
new ComponentName(getApplicationContext(),
BroadcastServiceReceiver.class);
pm.setComponentEnabledSetting(
compName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
@Override
public void onSharedPreferenceChanged(SharedPreferences
sharedPreferences,
String key)
// TODO Auto-generated method stub
savePrefs("CHECKBOX", cb.isChecked());
if (cb.isChecked());
【问题讨论】:
【参考方案1】:原来我不需要包管理器。 只需要正确构造广播接收器。
在此链接中找到。
Shared preferences not setting boolean inside boot_received broadcast receiver
感谢所有感兴趣的人。
迈克
【讨论】:
以上是关于广播接收器和首选项复选框不能一起工作的主要内容,如果未能解决你的问题,请参考以下文章