Я пытаюсь сделать свое первое уведомление, и я получаю исключение. На основе метода onCreate()
я звоню createNotification
из SchedulerActivity
класса и в этой процедуре я вызываю свой класс BroadcastReceiver
. Но я получаю исключение в SchedulerActivity
, когда я звоню BroadcastReceiver
классу на Intent myIntent = new Intent(SchedulerActivity.this, MyReceiver.class);
, и я не могу понять, почему.Android: Уведомление об уведомлении
Исключение:
java.lang.RuntimeException: Невозможно запустить активность ComponentInfo {com.converter.android.daily/com.converter.android.daily.MainActivity}: java.lang.NullPointerException : Попытка вызвать виртуальный метод 'java.lang.String android.content.Context.getPackageName()' на нуль ссылки на объект
на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2416) в android.app.ActivityThread.handl eLaunchActivity (ActivityThread.java:2476) на android.app.ActivityThread.-wrap11 (ActivityThread.java)
в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344)
в android.os. Handler.dispatchMessage (Handler.java:102)
на android.os.Looper.loop (Looper.java:148)
на android.app.ActivityThread.main (ActivityThread.java:5417)
в java.lang .reflect.Method.invoke (Native Method)
в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) в com.android.internal.os.ZygoteInit.ma в (ZygoteInit.java:616)
Вызванные: java.lang.NullPointerException: попытка вызвать виртуальный метод «java.lang.String android.content.Context.getPackageName()» на эталонного объекта нуля
на android.content.ContextWrapper.getPackageName (ContextWrapper.java:133) на android.content.ComponentName. (ComponentName.java:128)
на android.content.Intent. (Intent.java:4449)
в com.converter.android.daily.SchedulerActivity.createNotification (SchedulerActivity.java:272) at com.converter.android.daily.MainActivity.onCreate (MainActivity.java:3) 9) на android.app.Activity.performCreate (Activity.java:6251)
на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1107) на android.app.ActivityThread.performLaunchActivity (ActivityThread.java : 2369) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) на android.app.ActivityThread.-wrap11 (ActivityThread.java)
в android.app.ActivityThread $ H.handleMessage (ActivityThread .java: 1344) на android.os.Handler.dispatchMessage (Handler.java:102)
на android.os.Looper.loop (Looper.java:1 48)
на android.app.ActivityThread.main (ActivityThread.java:5417)
в java.lang.reflect.Method.invoke (нативный метод)
на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)
Main.class
public class MainActivity extends BaseActivity {
private SchedulerActivity sch= new SchedulerActivity();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sch.createNotification(this.getApplicationContext());
}
SchedulerActivity. класс
public class SchedulerActivity extends Activity implements PickerFragment.OnCompleteListener {
(...)
public void createNotification(Context context){
long when = System.currentTimeMillis();
String []parts;
String part1, part2;
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
status = pref.getString(botaoDaily, "");
time = pref.getString(dHora,"");
if (status.compareToIgnoreCase("On")==0) {
NotificationManager notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(
context).setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Daily")
.setContentText("My first Notification")
.setAutoCancel(true).setWhen(when)
.setContentIntent(pendingIntent);
// .setVibrate(new long[]{1000, 1000, 1000, 1000, 1000});
notificationManager.notify(1, mNotifyBuilder.build());
if(time.compareToIgnoreCase("")!=0) {
parts = time.split(":");
part1 = parts[0];
part2 = parts[1];
/*hours = Integer.valueOf(part1);
minutes = Integer.valueOf(part2);
seconds = 0;*/
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 16);/*TODO: hours, minutes*/
calendar.set(Calendar.MINUTE, 45);
calendar.set(Calendar.SECOND, 15);
//Service -> MyAlarmService
Intent myIntent = new Intent(SchedulerActivity.this, MyReceiver.class);
pendingIntent = PendingIntent.getBroadcast(SchedulerActivity.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, myIntent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000 /* milliseconds */ * 20 /* seconds */, alarmIntent);
}
}
}
MyReceiver.class
public class MyReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
Intent service1 = new Intent(context, MyAlarmService.class);
context.startService(service1);
}
}
Не могли бы вы помочь мне?
Только один вопрос, я должен поставить код "createNotification" из SchedulerActivity в моем главном классе? Это потому, что тогда у меня есть «Системные службы, недоступные для Activity before onCreate()» исключение? – porthfind
@porthfind: Вы можете поместить это в основную деятельность. Вызовите этот метод в onCreate (добавьте в качестве последнего оператора onCreate) –