我必须遗漏一些东西,我为自己做了一个测试应用程序项目,这在那里工作得很好但是当我试图将我的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
答案 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();
}
这应该可以解决问题。