Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AlarmManager没有';t火_Java_Android_Push Notification_Alarmmanager - Fatal编程技术网

Java AlarmManager没有';t火

Java AlarmManager没有';t火,java,android,push-notification,alarmmanager,Java,Android,Push Notification,Alarmmanager,我的便笺应用程序应该在用户设置的特定日期和时间,在我的用户便笺上以通知的形式记住我的用户。我的问题是我没有在设定的时间收到通知。 这是我的alarmManager.class(我在这里创建我的报警) 当用户创建新便笺时,这些行将被激发(它们将所有需要的内容发送到我的alarmManager.class) 当一切正常时,NotificationService.class应该在选择的时间被调用。(此处通知应显示给用户) 不幸的是,它不起作用。没有错误。没有通知。没什么。 我希望有人能帮助我。在我看来

我的便笺应用程序应该在用户设置的特定日期和时间,在我的用户便笺上以通知的形式记住我的用户。我的问题是我没有在设定的时间收到通知。
这是我的alarmManager.class(我在这里创建我的报警)

当用户创建新便笺时,这些行将被激发(它们将所有需要的内容发送到我的alarmManager.class)

当一切正常时,NotificationService.class应该在选择的时间被调用。(此处通知应显示给用户)

不幸的是,它不起作用。没有错误。没有通知。没什么。

我希望有人能帮助我。

在我看来,问题是当你创建一个
挂起的内容时:

PendingIntent pi = PendingIntent.getService(MainActivity.context, requestCode, i, PendingIntent.FLAG_UPDATE_CURRENT);
为确保绝对可靠,请计划一个报警,然后从
adb
运行以下命令:
adb外壳转储系统报警
并搜索您的
pendingent
。若您找到了它,那个么再安排一次警报,然后再运行一次命令。再次查找您的待定意图,确保它是新的,并尝试搜索此先前计划的。如果
pendingent
有问题,您只能找到最新的
pendingent

解决方案:
由于
AlarmManger
在比较
PendingEvents
时,不会比较传递给它的额外数据,而是比较请求代码、数据、操作和类别,因此每次计划新报警时都需要更改其中一个。我的建议是将
uri
从数据库传递到每个新计划的
pendingent
。这将使每一个都是统一的,这样旧的一个就不会在新的计划发生时被取消。总之,在代码调用方法
setData()
中调用参数
i
,并将uri作为参数传递。您可以在方法中或从调用该方法的类中执行此操作。可能是这样的:

 public static void createAlarm(long timeInMillis, int requestCode, Intent i, Uri uri) {
       i.setData(uri)
        PendingIntent pi = PendingIntent.getService(MainActivity.context, requestCode, i, PendingIntent.FLAG_UPDATE_CURRENT);
        getAlarmManager().set(AlarmManager.RTC_WAKEUP, timeInMillis, pi);
    }

您在调试中发现了什么?到底哪一部分失败了?
createAlarm()
调用?警报真的被设置了吗?
服务是否正在运行?闹钟准时响了吗?您是否根据当前时间仔细检查了您正在设置的
timeInMillis
,以确保您计算的报警时间是合理的?您的清单中是否有用于通知服务的
元素?@MikeM。我不知道如何调试它。我唯一能说的是,没有显示致命错误。是的,在清单中我正确地添加了所有内容。但是等等。使用
System.currentTimeMillis()
是什么意思?我只使用:
mUserReminderDate.getTime()
OK,你必须学习基本的调试技巧;e、 例如,确定应用程序失败的具体方式和位置,利用IDE的调试器,调整值以暴露行为等。作为一个一般主题,这远远超出了堆栈溢出的范围,因此我要求您先进行一些研究、测试,并对解决问题进行全面调查,然后提出具体问题,详细的问题。不,这对我没有帮助。你检查过你的待定计划是否已安排好了吗?
public class NotificationService extends IntentService {
    public static final String i_UID = "uuid";
    public static final String i_TEXT = "title";
    public static final String i_CONTENT  = "content";
    public static final String i_REMINDEDATE = "remindeDate";
    public static final String i_REPEAT = "repeatAlarm";

    private String mTodoText, mTodoContent, mTodoUUID;
    private Date mTodoDate;
    private int mTodoRepeat;
    private Intent processIntent;

    public NotificationService() {
        super("NotificationService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        this.processIntent = intent;
        mTodoText = intent.getStringExtra(i_TEXT);
        mTodoContent = intent.getStringExtra(i_CONTENT);
        mTodoUUID = intent.getStringExtra(i_UID);
        mTodoDate = (Date) intent.getSerializableExtra(i_REMINDEDATE);
        mTodoRepeat = intent.getIntExtra(i_REPEAT, 0);

        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        Notification notification = new Notification.Builder(this)
                .setContentTitle(mTodoText)
                .setContentText(mTodoContent)
                .setSmallIcon(R.drawable.app_logo_transparent_bg)
                .setAutoCancel(true)
                .setDefaults(Notification.DEFAULT_SOUND)
                .build();

        manager.notify(100, notification);
    }  
PendingIntent pi = PendingIntent.getService(MainActivity.context, requestCode, i, PendingIntent.FLAG_UPDATE_CURRENT);
 public static void createAlarm(long timeInMillis, int requestCode, Intent i, Uri uri) {
       i.setData(uri)
        PendingIntent pi = PendingIntent.getService(MainActivity.context, requestCode, i, PendingIntent.FLAG_UPDATE_CURRENT);
        getAlarmManager().set(AlarmManager.RTC_WAKEUP, timeInMillis, pi);
    }