gpt4 book ai didi

android - 如何获得警报以触发通知

转载 作者:太空狗 更新时间:2023-10-29 15:39:02 25 4
gpt4 key购买 nike

我需要设置一个重复的闹钟,一旦触发,就会发出通知。

步骤:

  1. 我有一个包含一些日期详细信息的界面(只是想到,也许我应该启动一个 intent 来显示“设置闹钟”功能)。详细信息的产品是需要输入警报方法的日期时间字符串。
  2. 设置闹钟时,我需要创建对它的引用,以便用户可以将其删除。 (或者可能不是,什么是最佳实践?也许用户只能从“警报”部分删除警报)
  3. 当闹钟响起时,将创建一个通知。

我不确定警报系统是如何工作的。警报可能应该是无声的,也许有振动。是直接设置吗?

我需要服务还是广播接收器可以完成这项工作?

基本上我只需要一些提示。我在想这个吗?那里有教程吗(我还没有找到任何东西)。提前致谢。

最佳答案

下面是我如何在我的应用中使用 AlarmService 的演练。

  1. 设置一个 AlarmManager 在 x 分钟内触发。

  2. 响应告警,启动服务。

  3. 创建您的通知并让您的服务自行设置一个新的警报,以便在再过 x 分钟后再次触发。

  4. 服务自行关闭。

1.

    Intent alarmIntent = new Intent(this, MyAlarm.class);
long scTime = 60* 10000;// 10 minutes
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + scTime, pendingIntent);

2.

    public class MyAlarm extends BroadcastReceiver
{

@Override
public void onReceive(Context context, Intent intent) {
Log.d("Alarm Recieved!", "YAAAY");
Intent i = new Intent(context, InviteService.class);
context.startService(i);
}
}

3.

      public class InviteService extends IntentService
{

/**
* A constructor is required, and must call the super IntentService(String)
* constructor with a name for the worker thread.
*/

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

/**
* The IntentService calls this method from the default worker thread with
* the intent that started the service. When this method returns, IntentService
* stops the service, as appropriate.
*/

@Override
protected void onHandleIntent(Intent intent) {

String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);

int icon = R.drawable.logo;
CharSequence tickerText = "New Invite!";
long when = System.currentTimeMillis();

Notification notification = new Notification(icon, tickerText, when);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.defaults |= Notification.DEFAULT_VIBRATE;

Context context = getApplicationContext();
CharSequence contentTitle = "Title";
CharSequence contentText = "Text";
Intent notificationIntent = new Intent(this, Destination.class);
Bundle partyBundle = new Bundle();

PendingIntent contentIntent = PendingIntent.getActivity(this, SOME_ID, notificationIntent, 0);

notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

int NOTIFICATION_ID = SOME_ID;

Log.d("NOTIFICATION_ID", "" + NOTIFICATION_ID);
mNotificationManager.notify(NOTIFICATION_ID, notification);

4.(同类)

      Intent alarmIntent = new Intent(this, MyAlarm.class);
long scTime = 60*1000;//mins
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + scTime, pendingIntent);

stopService(intent);
}
}

希望对您有所帮助!

编辑

为什么要使用服务?

在 BroadcastReceiver 中做太多处理是不明智的。尽管您可以在 BroadcastReciever 中进行一些处理,但在服务中执行此操作更安全,您可以在这个 StackOverflow 问题中找到一些信息 BroadcastReceiver vs Service

关于android - 如何获得警报以触发通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12199543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com