AlarmManager不在Fragment和Main.java中工作

时间:2014-02-21 14:37:09

标签: android android-fragments alarmmanager

我必须遗漏一些东西,我为自己做了一个测试应用程序项目,这在那里工作得很好但是当我试图将我的AlarmManager实现到我的主项目的片段中时,它将无法工作。这是我的代码:

我的片段中的方法:

public void schedule()
{
    Long time = new GregorianCalendar().getTimeInMillis()+10*1000;
    Intent intent = new Intent(getActivity(), AlarmReceiver.class);

    AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);

    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, time, 10*1000, PendingIntent.getBroadcast(getActivity(), 1,  intent, PendingIntent.FLAG_UPDATE_CURRENT));


}

这是我的AlarmReceiver.class

public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent)
{

    Toast.makeText(context, "Alarm Triggered", Toast.LENGTH_LONG).show();

}
}

此处还有我的清单文件中的准备工作:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>

   <application
    ... >
<receiver android:name=".AlarmReceiver"/>

我做错了什么?

注意:它似乎甚至没有达到AlarmReceiver

2 个答案:

答案 0 :(得分:2)

您的代码似乎有效。 但它的问题是显而易见的。

<receiver android:name=".AlarmReceiver"/>

应该是包含完整的包名称,例如

<receiver android:name="com.example.AlarmReceiver"/>

我已经用我的应用程序仔细检查了它。所以你很高兴。

答案 1 :(得分:2)

您使用的接收器不正确。您首先需要做的是向接收者的清单添加动作

<receiver android:name=".AlarmReceiver">
<intent-filter>
            <action android:name="com.example.action.ALARM" />
</intent-filter>

然后,使用该操作构建意图:

public void schedule() {
Long time = new GregorianCalendar().getTimeInMillis()+10*1000;
Intent intent = new Intent("com.example.action.ALARM");

...

}

并在您的接收器中:

public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("com.example.action.ALARM")
  Toast.makeText(context, "Alarm Triggered", Toast.LENGTH_LONG).show();
}

这应该可以解决问题。