我正在尝试使用闹钟管理器创建提醒。但似乎它不起作用。我试图使用不同的ID设置多个提醒但我的广播接收器没有被调用。我没有看到任何通知或任何声音。
我尝试了30-40次。
我将日期设置为日历25/11/2014
这是设置警报通知的myactivity代码。
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2014);
calendar.set(Calendar.MONTH, 11);
calendar.set(Calendar.DAY_OF_MONTH, 25);
calendar.set(Calendar.HOUR_OF_DAY, 19);
calendar.set(Calendar.MINUTE, 30);
//calendar.set(Calendar.SECOND, 1);
Intent myIntent = new Intent(CreateReminder.this, MyReceiver.class);
myIntent.putExtra("reminder_id",reminderid);
myIntent
.setAction("com.sandeep.alarm.REMINDER");
PendingIntent pendingIntent = PendingIntent.getBroadcast(
CreateReminder.this, reminderid, myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
pendingIntent);
MyReceiver.class
public class MyReceiver extends BroadcastReceiver {
private Ringtone r;
@SuppressWarnings("deprecation")
@Override
public void onReceive(Context context, Intent intent) {
int ID=intent.getExtras().getInt("reminder_id");
Log.i("CreateReminder", "reminder_id:-"+ID);
int icon = R.drawable.ic_launcher;
long when = System.currentTimeMillis();
NotificationManager notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(icon, "reminder", when);
String title = context.getString(R.string.app_name);
String subTitle = "Please complete task";
Intent notificationIntent = new Intent(context, ReminderActivity.class);
notificationIntent.putExtra("reminder_id", ID);
PendingIntent intent1 = PendingIntent.getActivity(context, 0,notificationIntent, 0);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
notification.setLatestEventInfo(context, title, subTitle, intent1);
//To play the default sound with your notification:
//notification.defaults |= Notification.DEFAULT_SOUND;
notification.flags |= Notification.FLAG_INSISTENT;
//notification.defaults |= Notification.;
notificationManager.notify(0, notification);
Uri notification1 = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
r = RingtoneManager.getRingtone(context, notification1);
r.play();
new Handler().postDelayed(new Runnable(){
public void run() {
r.stop();
}
}, 10000);
}
}
我在AndroidManifest.xml中注册了具有权限的接收器。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.sandip.remindme.CreateReminder"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.sandip.remindme.ReminderActivity"></activity>
<receiver android:name="com.sandip.remindme.MyReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.sandeep.alarm.REMINDER" />
</intent-filter>
</receiver>
</application>
我不明白为什么它不起作用。请给我一些提示或参考。
答案 0 :(得分:1)
在您的意图中设置行动后,您不会发送广播。
Intent myIntent = new Intent(CreateReminder.this, MyReceiver.class);
myIntent.putExtra("reminder_id",reminderid);
myIntent
.setAction("com.sandeep.alarm.REMINDER");
sendbroadcast(myIntent);//YOU FORGOT TO ADD THIS
答案 1 :(得分:0)
你永远不会发送广播。
sendbroadcast(myIntent);
执行.setAction
后直接添加,代码应该可以正常工作。
答案 2 :(得分:0)
我也在处理Alarm余数,我已经在我的应用程序中成功实现了。您可以在以下链接中下载示例代码。我希望它对你有所帮助。请注意,呼叫广播接收器需要30秒到1分钟的闹钟。也就是说,如果你在下午3:30:00设置闹钟,那么将在下午3:30:30左右调用广播接收器。
https://www.dropbox.com/s/t2m5ph8s8f17v6m/AndroidAlarmManager.zip?dl=0
谢谢
拉梅什
答案 3 :(得分:0)
我已将您的代码与我的代码进行比较,并为您提供了一些尝试...
com.sandeep.alarm 是真正的命名空间吗?您应用中的活动具有不同的命名空间 com.sandip.remindme ,因此您可以使用此(&#34; com.sandip.remindme.REMINDER&#34;)你的行动名称。
您的意图是使用特定的上下文和类目标创建的。尝试仅使用操作名称构建它,然后您将知道操作名称是否是问题:
Intent myIntent = new Intent("com.sandip.remindme.REMINDER")