2014-12-18 2 views
1

현재 알림 앱을 개발 중이며 지금까지 2 개의 알람을 설정했습니다. 매일 발생하는 알람 (AlarmX)과 올바른 날짜 인 경우 알람을 설정하는 다른 알람 (알람)을 설정합니다. 화면.여러 알람 충돌

이 코드는 내 머리 속에 의미가 있지만, 내가 원하는 것을 수행하지 않으며 logcat은 그가 어떻게 잡았는지 이해하지 못하는 오류를 표시합니다.

여기 코드가 있습니다. 어쩌면 내가 아는 어떤 것을 볼 수 있습니다.

AlarmX - BroadcastReceiver

public void SetAlarm(Context context) 
{ 
    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context, AlarmX.class); 
    intent.putExtra(ONE_TIME, Boolean.FALSE); 
    intent.setAction("com.todo.list.brodcast.ALARMX"); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); 
    //After after 30 seconds 
    Calendar c = Calendar.getInstance(); 
    Calendar k = Calendar.getInstance(); 
    k.set(Calendar.PM, 12); 
    if(c.getTimeInMillis()-k.getTimeInMillis()>0) k.setTimeInMillis(k.getTimeInMillis()+24*60*60*1000); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, k.getTimeInMillis() , 24*60*60*1000 , pi); } 

이 방법을 확장 클래스는 응용 프로그램과 결코 호출되지 도착이 클래스의 onReceive() 메소드를 충돌합니다. Fragment에서 다음과 같이 호출합니다.
AlarmX alarm = new AlarmX(); alarm.SetAlarm(getActivity().getApplicationContext()); Alarm 클래스와 같습니다. AlarmX와 동일하지만 로그에 따르면 cat은 호출되지 않아도 오류가 발생합니다. 나의 이해에 이제

public void onReceive(Context context, Intent intent) { 
    /*acquire power service manager*/ 
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
    @SuppressWarnings("deprecation") 
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,"TAG"); 
    wl.acquire(); 

    //TODO creaate Notification object 
    Bundle b = intent.getBundleExtra("Task"); 
    UUID id = UUID.fromString(b.getString("UUID")); 
    Notification n = new Notification(context, id); 
    n.setDescription(b.getString("Description")); 
    n.setTitle(b.getString("Topic")); 
    n.notifyUser(); 

    wl.release(); 
} 

AlarmXam.setRepeating() 명령은 내가 알람을 호출하지 않은 경우에도 알람에 onReceive() 방법을 트리거 할 때 내가 그것에 번들을 통과하지 않았기 때문에 onReceive()는 널 포인터 예외를 작성합니다. 여기에 logcat 출력이 있습니다 ...

12-18 22:36:22.857: E/AndroidRuntime(30124): FATAL EXCEPTION: main 
12-18 22:36:22.857: E/AndroidRuntime(30124): Process: com.todo.list:remote, PID: 30124 
12-18 22:36:22.857: E/AndroidRuntime(30124): java.lang.RuntimeException: Unable to start receiver com.todo.list.brodcast.Alarm: java.lang.NullPointerException 
12-18 22:36:22.857: E/AndroidRuntime(30124): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2856) 
12-18 22:36:22.857: E/AndroidRuntime(30124): at android.app.ActivityThread.access$1700(ActivityThread.java:156) 
12-18 22:36:22.857: E/AndroidRuntime(30124): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1440) 
12-18 22:36:22.857: E/AndroidRuntime(30124): at android.os.Handler.dispatchMessage(Handler.java:102) 
12-18 22:36:22.857: E/AndroidRuntime(30124): at android.os.Looper.loop(Looper.java:157) 
12-18 22:36:22.857: E/AndroidRuntime(30124): at android.app.ActivityThread.main(ActivityThread.java:5872) 
12-18 22:36:22.857: E/AndroidRuntime(30124): at java.lang.reflect.Method.invokeNative(Native Method) 
12-18 22:36:22.857: E/AndroidRuntime(30124): at java.lang.reflect.Method.invoke(Method.java:515) 
12-18 22:36:22.857: E/AndroidRuntime(30124): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
12-18 22:36:22.857: E/AndroidRuntime(30124): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674) 
12-18 22:36:22.857: E/AndroidRuntime(30124): at dalvik.system.NativeStart.main(Native Method) 
12-18 22:36:22.857: E/AndroidRuntime(30124): Caused by: java.lang.NullPointerException 
12-18 22:36:22.857: E/AndroidRuntime(30124): at com.todo.list.brodcast.Alarm.onReceive(Alarm.java:29) 
12-18 22:36:22.857: E/AndroidRuntime(30124): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2845) 
12-18 22:36:22.857: E/AndroidRuntime(30124): ... 10 more 

고마워요! -

편집 Manifest.xml 여기 내가 매니페스트 파일의 수신기 선언하는 방법입니다

<receiver 
     android:name="com.todo.list.brodcast.Alarm" 
     android:exported="false" 
     android:process=":remote" > 
     <intent-filter> 
      <action android:name="com.todo.list.brodcast.ALARM" /> 
     </intent-filter> 
    </receiver> 
     <receiver 
     android:name="com.todo.list.brodcast.AlarmX" 
     android:exported="false" 
     android:process=":Asd" > 
     <intent-filter> 
      <action android:name="com.todo.list.brodcast.ALARMX" /> 
     </intent-filter> 
    </receiver> 
+0

가능한 [null 포인터 예외 란 무엇이며 어떻게 수정합니까?] (http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – njzk2

+0

널 포인터 예외가 무엇인지 알고 있으며, 알람 클래스를 호출 한 적이 없기 때문에 알람 클래스에 번들이 없기 때문에 발생한다고 설명했습니다. 번들을 결코 전달하지 않았지만, 어쨌든 그것은 마술처럼 불려진다. –

+0

당신은 당신의 매니 페스트 파일에 수신기를 가지고있다. OS 부팅시 자동으로 생성됩니다. 당신이 그것을 원하지 않는다면, 당신의 매니페스트에 선언하지 말고, 그것을 동적으로 생성하십시오. –

답변

0

왜 그냥 꺼 대신 다른 호출 수있는 하나의 알람을 구현을 바로 대체 기능성?
저는 문제가 해결 될 것이고 코드를 간소화 할 것이라고 생각합니다.

+0

예, 그게 내가 한 일입니다. 그것은 효과가 있었다. 감사! –

관련 문제