0

ユーザー設定チェックボックスを使用して、ステータスバーに通知を表示または非表示にしようとしています。これまでのところ、私はこれを行ってきました:

MainActivity.java

@Override
public void UserPref {

    String notificationTitle = "ASD";
    String notificationMessage = "ASD ASD ASD";

    Intent targetIntent = new Intent(this, MainActivity.class);

    int requestCode = AppSingleton.NOTIFICATION_ID;

    PendingIntent contentIntent = PendingIntent.getActivity(this,
            requestCode, targetIntent, 0);
    String statusBarTickerText = "ASD ASD ASD";
    int icon = R.drawable.ic_launcher;

    Notification notification = new Notification(icon, statusBarTickerText,
            System.currentTimeMillis());
    notification.flags = Notification.FLAG_ONGOING_EVENT
            | Notification.FLAG_NO_CLEAR;
    notification.setLatestEventInfo(this, notificationTitle,
            notificationMessage, contentIntent);

    nm.notify(AppSingleton.NOTIFICATION_ID, notification);
}

通知を常に表示できます。しかし今、ユーザーが通知を無効または有効にできるユーザー設定を追加したいと考えています。PreferenceActivity のコードは次のとおりです。

UserPreference.java

public class UserPreference extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    addPreferencesFromResource(R.xml.prefs);

    final CheckBoxPreference checkboxPref = (CheckBoxPreference) getPreferenceManager()
            .findPreference("Checkbox");

    checkboxPref
            .setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                public boolean onPreferenceChange(Preference preference,
                        Object newValue) {
                     Log.d("MyApp", "Pref " + preference.getKey() + " changed to " + newValue.toString());       
                        return true;
                }
            });
   }
}

CheckBox が MainActivity.java からチェックされているときに関数を呼び出すことができませんが、DDMS でブール値を出力できます。

私が間違っていることを見て修正し、この問題を克服するのを手伝ってください。

4

1 に答える 1

1

設定の変更のためにリスナーを登録する必要はありません。デフォルトの共有設定に保存されているチェックボックスの値を取得するだけで、次のコードを使用して通知を送信する前にフラグを確認できます。

SharedPreferences defaultSettings = PreferenceManager.getDefaultSharedPreferences(this);
boolean notifyEnabled = defaultSettings.getBoolean("Checkbox", true);

if(notifyEnabled) {
    // Perform code to send notification 
}

チェックボックスの値が変更されたときに何らかの方法で通知を受け取りたい場合は、 onSharedPreference() メソッドをオーバーライドすることで実現できます。

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
    String key)
{
    if(key.compareToIgnoreCase("Checkbox") == 0)
    {
        boolean isChecked = sharedPreferences.getBoolean("Checkbox", false);
        if(isChecked)
        {
            // Checkbox is checked
        }
        else
        {
            // Checkbox has been unchecked
        }
    }
}
于 2012-09-06T07:25:28.373 に答える