警报提醒不起作用

时间:2014-11-22 18:30:35

标签: android broadcastreceiver alarm reminders

我正在尝试使用闹钟管理器创建提醒。但似乎它不起作用。我试图使用不同的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>    

我不明白为什么它不起作用。请给我一些提示或参考。

4 个答案:

答案 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")