2013-01-19 2 views
0

나는 어제와 비슷한 질문을했지만 내 코드가 바뀌었고 다른 문제가 생겼습니다.Alarm Manager는 방아쇠를 당하지 않습니다.

5 초 후에 트리거해야하는 보류중인 의도로 알람 관리자를 설정하는 토글 버튼이 있습니다. 한 번 설정하면됩니다. 나중에 메시지를 한 번 표시하고 싶습니다. 나중에 날짜 값으로 구현할 예정입니다.

이 코드에는 아무런 오류가 없지만 필자의 토스트 메시지를 보여주는 내 의도를 유발하지는 않습니다. 여기

내가 XML의 'DateAlarm'클래스의 활동을 정의하는 방법은 다음과 같습니다

 <activity 
     android:name=".DateAlarm" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="com.example.flybase2.DateAlarm" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

Heres는 알람 매니저 내 토글 버튼 내 내 토글 버튼의 ​​onclick 방법 :

case (R.id.toggleButton1): 

    Integer dobMonth = setDate.getMonth(); 
    Integer dobYear = setDate.getYear(); 
    Integer dobDate = setDate.getDayOfMonth(); 

    Date set; 
    set = new Date(dobYear - 1900, dobMonth, dobDate); 


    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, DateAlarm.class); 
    PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
    am.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + (5 * 1000), pendingIntent); 


    break; 

그리고 의도의 동작을 유지하는 마지막 'DateAlarm'클래스.

package com.example.flybase2; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.widget.Toast; 

public class DateAlarm extends Activity { 

Context context; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Toast.makeText(context, "Appointment is today", Toast.LENGTH_LONG).show(); 
} 

}

+0

는 @ PendingIntent.getActivity –

+0

에 PendingIntent.getService을 변경해보십시오 - C 덕분에 그 의도를 시작하는 것 같습니다. 현재 문제 발생 DateAlarm 클래스에서 클래스를 열면 null 포인터 예외가 발생합니다. – user1352057

+0

컨텍스트를 초기화하지 않았습니다. onCreate()에서'context = this;' –

답변

0

당신은 두 가지 문제가 있습니다

  1. 당신은 PendingIntent.getService()를 사용하는 대신 PendingIntent.getActivity()DateAlarmActivity 확장 이후됩니다, 당신은 PendingIntent.getActivity()을 원한다.

  2. DateAlarm에서 컨텍스트 변수가 null입니다. onCreate()에서 초기화해야합니다. ActivityContext이므로이 변수는 필요하지 않습니다. 당신이 그 변수를 사용하고 싶어하지만 경우에 수행


super.onCreate(savedInstanceState); 
context = this; 

또는

Context context = this; //right from the global declaration 
+0

많은 감사합니다. C. 새로운 자바 프로그래머로서 때때로 상황이 혼란 스럽습니다. 그래서 저는 문자 그대로 문맥 변수에 'this'라는 클래스의 문맥을 설정하고 있습니까? 이 올바른지? – user1352057

+0

아니요, 클래스의 컨텍스트를 'this'로 설정하지 않았습니다. 'Activity'는'Context'를 확장하여'Activity'는'Context'입니다. 당신이하고있는 일은 레퍼런스 변수 (꽤 중복 변수 임)를 DateAlarm의 현재 인스턴스를 가리 키도록 설정하는 것입니다. [상속] (http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)과 'this' [키워드] (http://docs.oracle.com/javase)를 살펴보십시오. /tutorial/java/javaOO/thiskey.html) –

+0

다시 한번 감사드립니다. 그것은 의미가 있습니다. 내 수업이 수퍼 클래스 활동을 확장하고 있다는 것을 알고 있으며, 또한 그것이 중복된다는 의미를 알 수 있습니다. 하나의 마지막 질문 내가 할 수 있다면, 당신이 작성한 것을 읽은 후에 나는 기본적으로 수퍼 클래스의 컨텍스트를 dateAlarm의 컨텍스트로 설정하고있다. 또한 오라클 기사를 참조하십시오. – user1352057