2016-05-20 9 views
-1

Hallo Ich habe eine Einstellungsaktivität, in der ein Kontrollkästchen namens "Display Preview" ist. Die Sache, die ich tun möchte, ist, wenn dieses Kontrollkästchen aktiviert ist, dann etwas an Broadcast-Empfänger senden. Im Broadcast-Empfänger möchte ich den Checkbox-Wert erhalten und wenn es wahr ist, d. H. Checkbox wurde markiert, dann wird die Benachrichtigung in der Benachrichtigungsleiste angezeigt, wenn neue Sms empfangen wurden. Wenn der Wert des Kontrollkästchens nicht aktiviert ist, wird keine Benachrichtigung angezeigt. Jetzt kann ich den Wert der Checkbox durch shared pref speichern, aber ich bekomme diesen Wert nicht in meiner Empfängerklasse.Wenn die Checkbox aktiviert ist, senden Sie den Wert an den Broadcast-Empfänger

Hier ist mein Code in der Aktivität Einstellungen: `

CheckBox ch1; 
private SharedPreferences loginPreferences; 
private SharedPreferences.Editor loginPrefsEditor; 
private Boolean saveLogin; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.settings); 
    ch1 = (CheckBox) findViewById(R.id.checkBox1); 
    loginPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE); 
    loginPrefsEditor = loginPreferences.edit(); 

    saveLogin = loginPreferences.getBoolean("saveLogin", false); 
    if (saveLogin == true) { 
     ch1.setChecked(true); 
    } 
} 
@Override 
protected void onStop() { 
    // TODO Auto-generated method stub 
    super.onStop(); 
    if (ch1.isChecked()) 
    { 
     loginPrefsEditor.putBoolean("saveLogin", true); 
     loginPrefsEditor.commit(); 
     Intent intent = new Intent("my.action.string"); 
     intent.putExtra("checked", "1"); 
     sendBroadcast(intent); 

    } 
else { 
     loginPrefsEditor.clear(); 
     loginPrefsEditor.commit(); 

    } 

Wie u i sehen einen Code schreiben, dass, wenn überhaupt verwendet diese Aktivität stoppen und wenn der Wert geprüft wird, dann sollte der Wert geht Klasse zum Empfänger. Jetzt im Empfänger Klasse hier ist mein Code:

String action = intent.getAction(); 
    String state = ""; 
    if(action.equals("my.action.string")){ 
     state = intent.getExtras().getString("checked"); 

     } 

Und schließlich, dass ich überprüft, ob der Wert des Zustandes 1 ist, dann Benachrichtigung anzeigen soll. Hier ist der Code für die Benachrichtigung

if (state == "1") 
     { 

     NotificationCompat.Builder notify = new NotificationCompat.Builder(context); 
      notify.setSmallIcon(R.drawable.newnotifysmall);    
      notify.setContentTitle(title); 
      notify.setContentText(msgBody); 
      notify.setAutoCancel(true); 
      Notification notification = new Notification(); 
      notification.defaults |= Notification.DEFAULT_VIBRATE; 
      //notify.setVibrate(new long[]{1000, 1000, 1000, 1000, 1000}); 
      notify.setLights(Color.GREEN, 2000, 2000); 
      notify.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 
      Intent notificationIntent = new Intent(Intent.ACTION_MAIN); 
      notificationIntent.addCategory(Intent.CATEGORY_DEFAULT); 
      notificationIntent.setType("vnd.android-dir/mms-sms"); 
      notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      PendingIntent intentt = PendingIntent.getActivity(context, 0,notificationIntent, 0); 
      notify.setContentIntent(intentt); 
      NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); 
      notificationManager.notify(0, notify.build()); 

     } 

ich geschrieben habe dies in meiner Manifest-Datei im Empfänger zu:

<action android:name="my.action.string"></action> 

Aber ich denke, dass der Wert nicht vergeht tor Empfänger Klasse. bitte Hilfe

+0

Mögliche Duplikat von [Wie vergleiche ich Strings in Java?] (Http://stackoverflow.com/questions/513832/how-do-ich-vergleiche-strings-in-java) –

+0

Vergleichen ??? Ich vergleiche nicht, ich bekomme einfach nicht den Wert von Aktivität zu Empfänger. Soll ich den Präferenzwert im Empfänger bekommen? –

+0

'state ==" 1 "' ist nicht so, wie man 'String' vergleicht. –

Antwort

1

Also hier ist ein, was Sie

Bei der Festlegung Aktivität tun konnte, in OnStop Methode intent.putExtra("checked", "1");

ändern es zu intent.putExtra("checked", 1) die Zitate von „1“ Nehmen Sie heraus, wie Sie nur eine Nummer senden keine Zeichenfolge.

Dann in der Empfängerklasse, stellen Sie sicher, dass Sie die Absicht deklariert und initialisiert haben.

Was ich getan habe, ist, dass, da Sie nur die Zahl nicht Zeichenfolge überprüfen müssen, ich den Status in Ganzzahl geändert habe. der Wert 1, der beim Empfang im Zustand gespeichert wird.

Sie würden wahrscheinlich wissen, was das bedeutet intent.getIntExtra("checked", 0); Hier 0 ist der Standardwert, den ich eingestellt habe.

Next in Benachrichtigungscode

if (state == 1){ 
    //all the notification code 
} 

Das ist alles, Hoffe, es funktioniert

+0

Ok lass mich das überprüfen Sir –

+0

Arbeit endlich :) –

+0

Froh, es funktioniert. Viel Spaß beim Programmieren :) –