onBroadcast не работает с менеджером будильников - PullRequest
0 голосов
/ 14 марта 2020

Я создал приложение, которое должно напоминать раз в день в определенное c время, чтобы что-то делать.

Я добавил этот код в onTimeSet TimePickerDialog. (Я отлаживаю, и он проходит через код и не попадает ни в какие исключения)

По какой-то причине он никогда не попадает в onRecive моего получателя.

Это код onTimeSet:

@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    tvTime.setText(hourOfDay + ":" + (minute < 10 ? "0" : "") + minute);
    Calendar cal = null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
        cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, hourOfDay);
        cal.set(Calendar.MINUTE, minute);
        Intent reciver = new Intent(getApplicationContext(), PillBroadcastReciver.class);
        PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, reciver, 0);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP , cal.getTimeInMillis(),
                AlarmManager.INTERVAL_DAY, alarmIntent);
    }
}

Это вещательный приемник:

publi c Класс PillBroadcastReciver расширяет BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals("myAction"){
        sendNotif(context);
    }
}

public static void sendNotif(Context context) {
    NotificationManager manager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent intent1 = new Intent(context,MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context,0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "notifyIdan")
            .setSmallIcon(R.drawable.pill)
            .setContentIntent(pendingIntent)
            .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.pill))
            .setContentTitle("Pill")
            .setContentText("Pill")
            .setPriority(NotificationCompat.PRIORITY_DEFAULT);
    manager.notify(100, builder.build());
}

Я также создал канал "notifyIdan". Это значение манифеста:

<uses-permission android:name="android.permission.SET_ALARM"/>
<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">
    <receiver
        android:name=".PillBroadcastReciver">
        <intent-filter>
            <action android:name="myAction"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Я вызвал функцию sendNotif только для того, чтобы исключить, что уведомление работает и работает хорошо. Моя проблема только с onRecive - пожалуйста, помогите мне. Я должен упомянуть, что я работаю с SDK 29.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...