2017-02-21 2 views
1

Ich versuche gerade, die Datumsauswahl und die Zeitauswahl einzurichten, um eine Benachrichtigung auszulösen, wenn die Zeit erreicht ist. Ich habe eine Methode in MainActivity erstellt und diese wird von AlarmReceiver aufgerufen. Jedes Mal, wenn der Timer den festgelegten Wert erreicht, stürzt die Anwendung ab und es werden keine Fehler in logcat angezeigt.AlarmReceiver & Notification Method verursacht Absturz?

Ich weiß, es ist etwas mit dieser Methode zu tun, die von AlarmReceiver aufgerufen wird, ich weiß nur nicht, was die Probleme sind. Diese Methode ist derzeit auch mit einer Schaltfläche verbunden, die beim Drücken (buttonStopAlarm) eine Benachrichtigung auslöst, wenn sie wie gewünscht gedrückt wird), so dass die Methode insgesamt funktioniert, sie funktioniert einfach nicht, wenn sie von einer anderen Klasse aufgerufen wird.

Jede Hilfe würde sehr geschätzt werden! Vielen Dank!

AlarmReceiver

package servicealarmdemo.test2; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.Toast; 

public class AlarmReceiver extends BroadcastReceiver { 

MainActivity main = new MainActivity(); 

@Override 
public void onReceive(Context arg0, Intent arg1) { 
    Toast.makeText(arg0, "Alarm received!", Toast.LENGTH_LONG).show(); 

    main.addNotification(); 

} 

} 

Antwort

3

dieses MainActivity main = new MainActivity(); tun Sie eine Instanz von MainActivity nur zu schaffen, aber es wird nicht contextthis bedeuten ist die im Grunde ist vorgesehen, wenn Activity durch die OS

gestartet so verschieben Sie Notification code in Ihrem Receiver und verwenden Sie arg0 als context

public class AlarmReceiver extends BroadcastReceiver { 

//MainActivity main = new MainActivity(); 

    Context cxt; 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     Toast.makeText(arg0, "Alarm received!", Toast.LENGTH_LONG).show(); 
     cxt = arg0; 

     //main.addNotification(); 
     addNotification(); 

    } 

    public void addNotification() { 
     NotificationCompat.Builder builder = 
       new NotificationCompat.Builder(cxt) 
         .setSmallIcon(R.drawable.icon_transperent) 
         .setContentTitle("Achieve Alert!") 
         .setContentText("This is a reminder for your deadline!"); 

     Intent notificationIntent = new Intent(cxt, MainActivity.class); 
     PendingIntent contentIntent = PendingIntent.getActivity(cxt, 0, notificationIntent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
     builder.setContentIntent(contentIntent); 

     // Add as notification 
     NotificationManager manager = (NotificationManager)cxt.getSystemService(Context.NOTIFICATION_SERVICE); 
     builder.setVibrate(new long[] { 0, 1000, 1000, 1000, 1000 }); 
     manager.notify(0, builder.build()); 
    } 

} 
+0

Danke für die Antwort, ich habe das auf AlarmReceiver verschoben. Es gibt nur einen Fehler, der jetzt für getSystemService angezeigt wird. Die Methode 'getSystemService (java.lang.String)' kann nicht aufgelöst werden. – ZenoX

+0

@ZenoX verwenden 'cxt.getSystemService..' –

+0

Vielen Dank für Ihre Hilfe. Ich habe es gerade getestet und Benachrichtigungen werden jetzt ausgelöst, wenn die Zeit erreicht ist! Auch danke für die Erklärung über den MainActivity-Code, der eine Instanz ist, hat es wirklich geholfen, mein Verständnis! – ZenoX

Verwandte Themen