Ahm*_*med 5 android broadcastreceiver alarmmanager android-alarms android-pendingintent
我想在特定时间创建通知.我正在创建一个广播接收器并通过AlarmManager调用它.问题是没有收到广播,我没有收到任何通知.
在清单中注册广播接收器,
<receiver
android:name="com.example.android.receivers">
<intent-filter>
<action android:name="com.example.android.receivers.AlarmReceiver" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
这是广播接收器,
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context pContext, Intent pIntent) {
// if (pIntent.getAction().equalsIgnoreCase("")) {
//
// }
Log.d("Alarm Receiver", "onReceive called");
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(pContext).setSmallIcon(R.drawable.icon).setContentTitle("Test Notification")
.setContentText("Test Notification made by Syed Ahmed Hussain");
Intent resultIntent = new Intent(pContext, CalendarView.class);
// The stack builder object will contain an artificial back stack for the
// started Activity.
// This ensures that navigating backward from the Activity leads out of
// your application to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(pContext);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(CalendarView.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
notificationBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager = (NotificationManager) pContext.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(1, notificationBuilder.build());
}
}
Run Code Online (Sandbox Code Playgroud)
主要活动中的代码,用于创建警报.
/**
*
* @param pDate
* @param pTime
*/
private void createNotification(String pDate, String pTime) {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
// alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent);
alarmManager.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), alarmIntent);
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出并纠正我做错了什么?谢谢.
您的清单中的Receiver定义错误.
试试这个:
<receiver android:name="com.example.android.receivers.AlarmReceiver" />
Run Code Online (Sandbox Code Playgroud)
在android:name
你必须指定接收器的绝对包+类,或者package="com.example.android"
在Manifest的根元素中指定的亲属.例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android" >
Run Code Online (Sandbox Code Playgroud)
接收器的动作部分用于指定要侦听的动作.所以你也可以这样做:
基于Action而不是类创建Intent
public static final String ACTION = "com.example.android.receivers.NOTIFICATION_ALARM";
private void createNotification(String pDate, String pTime) {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(ACTION);
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), alarmIntent);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以在接收器中处理多个动作:
@Override
public void onReceive(Context pContext, Intent pIntent){
if (pIntent.getAction().equals(ACTION)){
// Here your handle code
}
}
Run Code Online (Sandbox Code Playgroud)
但是,您必须以这种方式在清单中声明您的接收器:
<receiver android:name="com.example.android.receivers">
<intent-filter>
<action android:name="com.example.android.receivers.NOTIFICATION_ALARM" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
你可以两种方式使用.
归档时间: |
|
查看次数: |
18980 次 |
最近记录: |