Alarmmanager(无通知)

问题描述 投票:1回答:1

我想拥有一个Android应用程序,该应用程序会向我发送特定时间和日期的通知,但我不知道为什么我的程序不能那样工作。如果模拟器按时,则没有通知。有人可以帮我解决我的错误吗?

MainActivity:

import androidx.appcompat.app.AppCompatActivity;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        boolean alarm = (PendingIntent.getBroadcast(this, 0 , new Intent("Alarm"), PendingIntent.FLAG_NO_CREATE) == null);

        if (alarm){
            Intent intentAlarm = new Intent("Alarm");
            PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0 , intentAlarm, 0);
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.add(Calendar.SECOND, 3);
            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 600, pendingIntent);
        }
    }
}

BroadcastManager:

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.util.Log;

import androidx.core.app.NotificationCompat;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class BroadcastManager extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            String testDate = "12/01/2020";
            String testHour = "13:55:00";
            Date d = new Date();
            DateFormat date = new SimpleDateFormat("dd/MM/yyyy");
            DateFormat hour = new SimpleDateFormat("HH:mm:ss");
            if (date.equals(testDate) && date.equals(testHour))
            {
                Intent intent1 = new Intent(context, MainActivity.class);
                createNotification(context, intent1, "Test title", "body!", "Test message");
            }
        }catch (Exception e){
            Log.i("date", "error == " + e.getMessage());
        }
    }

    public void createNotification(Context context, Intent intent, CharSequence ticker, CharSequence title, CharSequence description){
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
        builder.setTicker(ticker);
        builder.setContentTitle(title);
        builder.setContentText(description);
        builder.setSmallIcon(R.drawable.android_icon_black);
        builder.setContentIntent(pendingIntent);
        Notification notification = builder.build();

        notification.vibrate = new long[]{150, 300, 150, 400};
        notification.flags = Notification.FLAG_AUTO_CANCEL;

        notificationManager.notify(R.drawable.android_icon_black, notification);

        try {
            Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            Ringtone ringtone = RingtoneManager.getRingtone(context, uri);
            ringtone.play();
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }
}

AndroidManifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="*****">

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name=".BroadcastManager"
            android:label="BroadcastReceiverAux">
            <intent-filter>
                <action android:name="Alarm"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>

感谢您的帮助

java android notifications alarmmanager
1个回答
0
投票

警报之间的间隔小于1秒。将间隔秒数增加5秒以上(尝试5000)。

© www.soinside.com 2019 - 2024. All rights reserved.