首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在android上如何在特定时间发出通知?

在android上如何在特定时间发出通知?
EN

Stack Overflow用户
提问于 2015-12-30 03:13:17
回答 2查看 74.3K关注 0票数 45

我想在特定时间通知我的应用程序。比方说,每天早上7点,即使应用程序关闭,我也要发出通知。

我该怎么做呢?有什么教程吗?请注明链接。

EN

回答 2

Stack Overflow用户

发布于 2015-12-30 03:54:48

您可以使用AlarmManager在指定时间设置闹钟

代码语言:javascript
复制
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if (!prefs.getBoolean("firstTime", false)) {

    Intent alarmIntent = new Intent(this, AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);

    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 7);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 1);

    manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, pendingIntent);

    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("firstTime", true);
    editor.apply();
}

我用SharedPreferences检查,这不是第一次运行应用程序,如果是,你就设置闹钟,否则什么都不做,而不是在每次启动应用程序时重置闹钟。

使用BroadcastReceiver监听警报发生的时间

代码语言:javascript
复制
public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // show toast
        Toast.makeText(context, "Alarm running", Toast.LENGTH_SHORT).show();
    }
}

使用另一个接收器监听设备引导,以便您可以重置警报

代码语言:javascript
复制
public class DeviceBootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
            // on device boot compelete, reset the alarm
            Intent alarmIntent = new Intent(context, AlarmReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);

            AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.set(Calendar.HOUR_OF_DAY, 7);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 1);

            manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                    AlarmManager.INTERVAL_DAY, pendingIntent);
        }
    }
}

将权限添加到清单

代码语言:javascript
复制
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

然后注册你的接收器

代码语言:javascript
复制
<receiver android:name=".DeviceBootReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
<receiver android:name=".AlarmReceiver" />
票数 17
EN

Stack Overflow用户

发布于 2021-01-08 18:07:30

使用NotifyMe安卓库接收简单的通知。很容易设置您想要弹出通知的延迟或时间。系统重新启动时将弹出通知。

使用Jitpack.io下载库将此文件添加到应用程序的build.gradle文件中。

代码语言:javascript
复制
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

将其添加到项目的build.gradle依赖项中。

代码语言:javascript
复制
dependencies {
        implementation 'com.github.jakebonk:NotifyMe:1.0.1'
}

示例创建NotifyMe生成器对象

代码语言:javascript
复制
NotifyMe.Builder notifyMe = new NotifyMe.Builder(getApplicationContext());

然后设置您想要的字段。

代码语言:javascript
复制
notifyMe.title(String title);
notifyMe.content(String content);
notifyMe.color(Int red,Int green,Int blue,Int alpha);//Color of notification header
notifyMe.led_color(Int red,Int green,Int blue,Int alpha);//Color of LED when 
notification pops up
notifyMe.time(Calendar time);//The time to popup notification
notifyMe.delay(Int delay);//Delay in ms
notifyMe.large_icon(Int resource);//Icon resource by ID
notifyMe.rrule("FREQ=MINUTELY;INTERVAL=5;COUNT=2")//RRULE for frequency of 
//notification
notifyMe.addAction(Intent intent,String text); //The action will call the intent when 
//pressed

在设置了所有需要的字段之后,只需调用build()!

代码语言:javascript
复制
notifyMe.build();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34517520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档