2017-02-21 74 views
1

我目前正在尝试设置日期选择器和时间选择器,以在到达时间时发出通知。我在MainActivity中创建了一个方法,并且正在从AlarmReceiver中调用。每当计时器达到设定值时,应用程序崩溃并且logcat中不显示错误。AlarmReceiver&通知方法导致崩溃?

我知道这是从AlarmReceiver调用这个方法,我只是不知道问题是什么。这个方法目前还与一个按钮有联系,当按下按钮(buttonStopAlarm)时,按钮会按照想要的方式触发通知),所以整体上该方法不起作用,从另一个类中调用时它不起作用。

任何帮助将不胜感激!谢谢!

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(); 

} 

} 

回答

3

通过这样做MainActivity main = new MainActivity();你是刚刚创建的MainActivity一个实例,但它不会有它的context意味着thisActivityOS

开始它基本上设置所以请将Notification code移至Receiver并使用arg0作为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

感谢您的回复,我已将其移交给AlarmReceiver。现在只有一个错误显示getSystemService。无法解析方法'getSystemService(java.lang.String)' – ZenoX

+0

@ZenoX使用'cxt.getSystemService..' –

+0

非常感谢您的帮助。我刚刚测试过,通知现在正在被触发!另外感谢您解释MainActivity代码作为一个实例,它真的帮助我理解! – ZenoX