android - 通过设置时间android进行每日本地通知

标签 android notifications broadcastreceiver alarmmanager android-notifications

我正在调用 TimePickerDialog 并根据用户设置的时间,根据用户将在状态栏上收到每日通知的时间

我已经写了下面的代码,

首先我通过下面的代码调用对话框

          @Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case TIME_DIALOG_ID:
        // set time picker as current time
        return new TimePickerDialog(this, timePickerListener, hour, minute,
                true);

    }
    return null;
}

监听方法是

     private TimePickerDialog.OnTimeSetListener timePickerListener = new TimePickerDialog.OnTimeSetListener() {

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minutes) {
        System.out.println("TimePicker: OnTimeSetLister: hour is "+hourOfDay+": mins"+minutes);
        DailyNotification.registerAlarm(SubscribeMsgTime.this, hourOfDay, minutes);
    }

};

我在 AndroidMenifiast.xml 文件中使用了 BroadCastRecevier

        <receiver
        android:name="com.example.easynotification.DailyNotification"
        android:process=":remote" >
        <intent-filter>
            <action android:name="com.example.easynotification.DAILY_NOTIFICATION" />
            <action android:name="android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE" />
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

最后的 DailyNotification (BroadcastReceiver) 类在下面

public class DailyNotification extends BroadcastReceiver {



public static void registerAlarm(Context paramContext, int mHour, int mMin) {
    Calendar calendar = Calendar.getInstance();
    if (calendar.get(Calendar.HOUR_OF_DAY) >= mHour) {
        calendar.add(Calendar.DATE, 1);
    }
    calendar.set(Calendar.HOUR_OF_DAY, mHour);
    calendar.set(Calendar.MINUTE, mMin);
    calendar.set(Calendar.SECOND, 00);


    PendingIntent localPendingIntent = PendingIntent.getBroadcast(
            paramContext, 22341, new Intent(
                    "com.example.easynotification.DAILY_NOTIFICATION"),
            PendingIntent.FLAG_UPDATE_CURRENT);

    ((AlarmManager) paramContext.getSystemService("alarm")).setRepeating(1,
            calendar.getTimeInMillis(), 24 * 60 * 60 * 1000,
            localPendingIntent);
    System.out.println("Alarm Registered on Hour :- "+mHour+" : Min "+mMin);
}

private void showNotification(Context paramContext) {
    try {
        Notification localNotification = new Notification(R.drawable.ic_launcher,
                paramContext.getString(R.string.app_name),
                System.currentTimeMillis());
        localNotification.flags = (0x10 | localNotification.flags);
        // PendingIntent that will start the EnterWeightActivity

        Intent intent = new Intent(paramContext, MainActivity.class);
        PendingIntent localPendingIntent = PendingIntent.getActivity(
                paramContext, 0, intent, 0);

        localNotification.setLatestEventInfo(paramContext, "hi", "Amit",
                localPendingIntent);
        // Retrieve a NotificationManager to show the notification
        ((NotificationManager) paramContext
                .getSystemService("notification")).notify(0,
                localNotification);

    } catch (Exception e) {
        e.printStackTrace();
    }
}
@Override
public void onReceive(Context paramContext, Intent paramIntent) {
    if (paramIntent.getAction().equals(
            "com.example.easynotification.DAILY_NOTIFICATION"))
        showNotification(paramContext);
}

但一切正常对话框正在注册打开时间但通知或 onReceive 方法未调用请任何人帮助我

最佳答案

我对您的代码了解不多,但我认为您希望根据从 TimePickerDialog 获取的时间获取每日通知,所以我的建议是这个示例会对您有所帮助

http://karanbalkar.com/2013/07/tutorial-41-using-alarmmanager-and-broadcastreceiver-in-android/

关于android - 通过设置时间android进行每日本地通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19057166/

相关文章:

单击window10上的android studio图标时Android studio未打开

android - 如何在 android 中将复杂类型的对象传递给 WorkManager。即列表、 map 、POJO

android - 如何创建支持旧 API 级别(例如 23 级)的 Android 通知

ios - Apple Watch 显示 UILocalNotification 的短看或长看通知

android - 如何注入(inject)广播接收器

java - 如何等待广播接收器完成

android - Cordova:安装了 android-23 sdk 时仍然收到错误 "please install android target 23"

email - 如何从 Jenkins 构建失败电子邮件的收件人中删除用户

c++ - Windows 10 Toast 通知桌面应用程序

android - 为 BroadcastReceiver 显示 Toast