2013-01-19 103 views
0

昨天我問了一個類似這樣的問題,但已經改變了我的代碼,並且現在有一個不同的問題。報警管理器無法觸發

我有一個切換按鈕,設置報警經理掛起的意圖5秒後,應能觸發。我有一次性的設置,所以我希望消息出現一次(後面我會實現這個日期值)。

我沒有得到這個代碼的錯誤,但我似乎不能觸發我的意圖,然後顯示我的吐司消息。

下面是我所定義的「DateAlarm」類中的XML活動:

 <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> 

我的繼承人我的切換按鈕的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.getService到PendingIntent.getActivity –

+0

@ A - Ç感謝那似乎開始了這個意圖。現在只有問題當在DateAlarm類上打開類時,即時獲取Null指針異常。 – user1352057

+0

您尚未初始化上下文。在onCreate()做'context = this;' –

回答

0

你有兩個問題:

  1. 您正在使用PendingIntent.getService()代替PendingIntent.getActivity()由於DateAlarm擴展Activity,你要PendingIntent.getActivity()

  2. DateAlarm您的上下文變量爲空。在onCreate()你應該初始化它。另請注意,由於Activity延伸了Context,因此不需要此變量。但是,如果你想使用該變量做:


super.onCreate(savedInstanceState); 
context = this; 

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

非常感謝A - C。作爲一個新興的Java程序員,有時候上下文讓我感到困惑。所以我在字面上將類的上下文(即'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的上下文,即如你所說的那樣引用它?對於Oracle文章也是ty。 – user1352057