0

사용자 환경 설정 확인란을 사용하여 상태 표시 줄에 알림을 표시할지 여부를 표시하려고합니다.Android : 사용자 환경 설정 확인란을 통해 상태 표시 줄에 알림 표시

@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); 
} 

내가 모든 시간을 알림을 보여줄 수있어

MainActivity.java : 지금까지 나는이 수행했다. 하지만 이제는 사용자가 알림을 사용하지 않도록 설정하거나 사용하도록 설정할 수있는 사용자 기본 설정을 추가하려고합니다. 여기 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; 
       } 
      }); 
    } 
} 

I 체크 박스가 MainActivity.java에서 확인 될 때 ​​함수를 호출 할 수없는거야하지만 난 인쇄 할 수있어 내 DDMS의 부울 값입니다.

제가 잘못하고있는 것을보고 수정하여이 문제를 극복하도록 도와주세요.

답변

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 
     } 
    } 
} 
+0

감사합니다. 하지만 내 MainActivity 클래스에서 함수를 호출 할 수 없습니다. 그렇게 할 방법을 제안 할 수 있습니까? – Anupam

+0

구체적으로 말하고있는 기능은 무엇입니까? 통보를받는 사람? 지금 당장은 공개 무효화 된 UserPref가 현재 무시하고있는 것에 대해 다소 혼란스러워합니다. 그게 방법인가요? 그렇다면 그 메소드를 직접 호출 할 수 있어야합니다. PreferenceActivity에서 호출하려고하면 올바른 컨텍스트를 제공해야합니다. 두 번째 시나리오에서는 컨텍스트를 받아들이는 자신의 클래스에 해당 알림을 팩터 리하는 것이 더 나을 수 있습니다. 그러면 어떤 용도로든 사용할 수 있도록 인스턴스화 할 수 있습니다. –

+0

감사하지만 문제는 해결되었습니다. 환호! – Anupam