Android 报警提示不工作

Android 报警提示不工作,android,broadcastreceiver,alarm,reminders,Android,Broadcastreceiver,Alarm,Reminders,我正在尝试使用报警管理器创建提醒。但它似乎不起作用。我正在尝试使用不同的id设置多个提醒,但我的广播接收器没有被呼叫。我没有看到任何通知或任何声音 我试了30-40次 我将日期设定为2014年11月25日 这是设置报警通知的myactivity代码 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2014); calendar.set(Calendar.MONTH, 11);

我正在尝试使用报警管理器创建提醒。但它似乎不起作用。我正在尝试使用不同的id设置多个提醒,但我的广播接收器没有被呼叫。我没有看到任何通知或任何声音

我试了30-40次

我将日期设定为2014年11月25日

这是设置报警通知的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>    


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

在您按照自己的意图设置操作后,您不会发送广播

 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

你永远不会发送广播

sendbroadcast(myIntent);

在您执行
.setAction
之后直接添加它,代码应该可以正常工作。

我也在处理报警余数,我已经在我的应用程序中成功实现了。您可以在下面的链接中下载示例代码。我希望它能帮助你。请注意,警报呼叫广播接收器需要30秒到1分钟。i、 例如,如果您在3:30:00pm设置报警,则广播接收器将在3:30:30pm左右调用

谢谢


Ramesh

我将您的代码与我的代码进行了比较,并有一些东西供您尝试

com.sandeep.alarm是真正的名称空间吗?应用程序中的活动具有不同的名称空间com.sandip.remementme,因此您可以使用此(“com.sandip.remementme.remement”)作为操作名称

您的意图是通过特定的上下文和类目标创建的。尝试仅使用操作名称构建它,然后您就会知道操作名称是否是问题所在:

Intent myIntent = new Intent("com.sandip.remindme.REMINDER")

您确定日历设置正确吗?记住,月份是以零为基础的;i、 例如,
日历。一月==0
。另外,如果您试图为当前时间设置日历,则不需要调用
calendar.set()
Calendar.getInstance()
返回一个已设置当前时间的实例。我肯定会放弃所有日历内容(您可能也有时区问题),只需使用System.currentTimeMillis()+(30*1000)并期望警报在30秒内响起。如果没有,则说明所有组件的布线都有问题,如果有问题,则说明日历逻辑没有真正工作。@Sandip我在运行代码时删除了
Calendar.set()
方法进行测试,它会按预期立即启动。除非时间设置不正确,否则我唯一能想到的是你的接收器不在正确的文件夹中。@MikeM。我已将接收器放在同一文件夹中。所以我在做什么。我从时间采集器获取时间,并将小时和分钟设置为日历。从用户处接受简单的日期,如2014年12月12日,并将其设置为日历。那么我在这方面做错了什么吗?@Sandip是的,没有看到你用来确定日期和时间的代码,我只能假设可能有什么不对劲。正如我提到的,记住
一月==0
。此外,如果用户手动输入日期并且您正在解析字符串,请确保您不会混淆月/日。该意图用于创建要传递给AlarmManager的PendingEvent。它不打算在那个时候播出。是的@MikeM。!问题在于将错误的日期设置为提醒。我正在设置
January=1
,而不是
January=0
@archon92它与sendBroadcast(意图)无关。该意图用于创建要传递给AlarmManager的PendingEvent。它不是要在那个时候播出的。