android - 如何通过 Workmanager 定期发送随机通知

标签 android android-notifications android-workmanager

我可以每 15 分钟定期发送通知,但我无法更改通知的内容。我有一个字符串数组,workmanager 总是发送相同的项目。例如,一开始它接受 valur“四”,它总是发送“四”

1 - 我在 strings.xml 中定义了一个字符串数组

<string-array name="numbers">
    <item>one</item>
    <item>two</item>
    <item>three</item>
    <item>four</item>
    <item>five</item>
</string-array>

2 - 我的 MainActivity 类

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
public static final String KEY_TASK_DESC = "key_task_desc";


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

    String[] list = getResources().getStringArray(R.array.numbers);

    Random random = new Random();
    int number = random.nextInt(list.length);

    Data data = new Data.Builder()
            .putString(KEY_TASK_DESC, list[number]).build();

    PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest
            .Builder(MyWorker.class, 15, TimeUnit.MINUTE)
            .setInputData(data)
            .build();

    WorkManager.getInstance().enqueue(periodicWorkRequest);

}}

3 - 包含 displayNotif(String inputData) 方法的 MyWorker 类

public class MyWorker extends Worker {

public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
    super(context, workerParams);
}

@NonNull
@Override
public Result doWork() {

    String inputData = getInputData().getString(MainActivity.KEY_TASK_DESC);
    displayNotif(inputData);

    return Result.success();
}

private void displayNotif(String inputData) {
    NotificationManager manager =
            (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

        NotificationChannel channel = new NotificationChannel("notif",
                "notif", NotificationManager.IMPORTANCE_DEFAULT);
        manager.createNotificationChannel(channel);
    }

    NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), "notif")
            .setContentText(inputData)
            .setSmallIcon(R.mipmap.ic_launcher);

    manager.notify(1, builder.build());
}}

最佳答案

我认为您可能误解了您的 PeriodicWorkRequest 设置。

你只用一个data(你的字符串)调用了一次setInputData。每次运行时,它仍然只有这个数据

要随机显示一个字符串,您的随机选择必须发生在您的 Worker 的 doWork 中。

关于android - 如何通过 Workmanager 定期发送随机通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61546131/

相关文章:

android - 构建gradle模块android studio中的错误

java - 如何使用 WorkManager 显示新 Activity (屏幕)

android-workmanager - 如何在没有序列化的情况下将对象作为输入传递给 WorkManager?

android - 加急工作请求需要 ListenableWorker 来提供 getForegroundInfoAsync() 的实现

android - 将参数传递给 GcmTaskService

android - 从 Google Plus 注销/断开连接(Ionic/Cordova - cordova-plugin-googleplus)

android - 获取所有 SIM 电话号码

java - 同时获取所有通知

Android Firebase 通知 (FCM)

Android 通知图标在某些设备上为空白