首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当点击通知时,转到Mainactivity并恢复任务(Countdown timer应继续) Android Studio

当点击通知时,转到MainActivity并恢复任务(Countdown Timer应继续)需要进行以下步骤:

  1. 创建一个通知:
    • 使用NotificationCompat.Builder类创建一个通知构建器。
    • 设置通知的标题、内容、图标等属性。
    • 设置通知的点击行为,即点击通知时要启动的Activity。
  • 在MainActivity中处理通知点击事件:
    • 在MainActivity的onCreate方法中获取Intent对象。
    • 检查Intent中是否包含特定的标志,以确定是否是从通知启动的。
    • 如果是从通知启动的,则获取之前保存的任务状态,如倒计时的剩余时间。
    • 根据任务状态进行相应的处理,如恢复倒计时。
  • 保存任务状态:
    • 在MainActivity的onPause方法中保存任务状态,如倒计时的剩余时间。
    • 使用SharedPreferences或其他持久化方式将任务状态保存起来。

以下是一个示例代码,演示了如何实现上述功能:

代码语言:txt
复制
// 创建通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("任务通知")
        .setContentText("点击通知返回任务")
        .setAutoCancel(true);

// 设置通知的点击行为
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);

// 发送通知
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, builder.build());

// 在MainActivity中处理通知点击事件
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 检查是否是从通知启动的
    Intent intent = getIntent();
    if (intent != null && (intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
        // 获取之前保存的任务状态
        SharedPreferences sharedPreferences = getSharedPreferences("TaskState", Context.MODE_PRIVATE);
        long remainingTime = sharedPreferences.getLong("RemainingTime", 0);

        // 根据任务状态进行处理,如恢复倒计时
        if (remainingTime > 0) {
            // 创建倒计时
            CountdownTimer countdownTimer = new CountdownTimer(remainingTime, 1000) {
                @Override
                public void onTick(long millisUntilFinished) {
                    // 更新倒计时显示
                }

                @Override
                public void onFinish() {
                    // 倒计时结束处理
                }
            };

            // 启动倒计时
            countdownTimer.start();
        }
    }
}

// 在MainActivity中保存任务状态
@Override
protected void onPause() {
    super.onPause();

    // 保存任务状态
    SharedPreferences sharedPreferences = getSharedPreferences("TaskState", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putLong("RemainingTime", countdownTimer.getRemainingTime());
    editor.apply();
}

在这个示例中,我们使用了NotificationCompat.Builder类创建了一个通知,并设置了通知的标题、内容、图标等属性。然后,我们创建了一个Intent对象,并设置了特定的标志,以便在MainActivity中判断是否是从通知启动的。接下来,我们使用PendingIntent将Intent与通知关联起来,当用户点击通知时,会启动MainActivity,并传递相应的Intent。最后,我们使用NotificationManager发送了通知。

在MainActivity中,我们在onCreate方法中获取了之前保存的任务状态,并根据任务状态进行相应的处理,如恢复倒计时。在onPause方法中,我们保存了任务状态,以便在下次启动时能够恢复任务。

请注意,这只是一个示例代码,实际应用中可能需要根据具体需求进行适当的修改和扩展。另外,为了简化示例,我们没有包含倒计时的具体实现,你需要根据自己的需求来实现倒计时的逻辑。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android Studio如何实现音乐播放器(简单易上手)

activity_main为MainActivity的布局文件,显示运行APP的主界面。 activity_music为MusicActivity的布局文件,显示音乐播放器界面。...四、详细设计 1、搭建主界面布局 首先打开Android Studio新建一个工程,File——>New——>New Project——>Empty Project,工程名称叫做Music_List...如图: (1)frag2类:展示的封面专辑图片,在主界面点击专辑按钮跳转到此界面。...: (2)点击专辑选项卡: (3)再选择歌曲选项卡,选择第一首歌《光年之外》打开,跳转到音乐播放页面,歌手的封面图片显示在正中间,发现《光年之外》的歌名也传递过来了: (4)...点击播放音乐按钮,音乐开始播放,进度条开始滑动,图片开始旋转: (5)点击暂停播放按钮,音乐停止播放,而且进度条停止滑动,图片也停止旋转: (6)点击继续播放按钮,音乐继续播放,歌手图片也继续旋转

7.1K22

Activity状态和生命周期方法

例如,最上面的Activity没有完全覆盖屏幕或者是透明的,被覆盖的Activity仍然对用户可见,并且存活(它保留着所有的状态和成员信息保持与Activity管理器的连接)。...onRestart():重新启动 Activity 被回调。 onResume():恢复 Activity 被回调。在onStart()方法后一定会回调 onResume()方法。...这时在Android Studio的LogCat窗口会打印MainActivity生命周期中的执行方法,如下图所示: ?...第一个界面跳转到第二个界面,LogCat 窗口会打印MainActivity和SecondActivity生命周期中的执行方法,如下图所示: ?...从上图可以看到,转到第二个界面MainActivity首先失去焦点执行了onPause()方法,然后SecondActivity依次执行了onCreate()、onStart()、onResume

1.9K60
  • CountDownLatch 与 CyclicBarrier

    每当一个线程完成了自己的任务后,计数器的值就会减1。计数器值到达0,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。...其他线程完成任务后必须各自通知CountDownLatch对象,使其调用countDown方法。count值为0,主线程就能通过await方法恢复自己的任务。...我们只需调用 一次countDown()方法就可以让所有的等待线程同时恢复执行。 开始执行前等待n个线程完成各自任务:例如应用程序启动类要确保在处理用户请求前,所有N个外部系统已经启动和运行了。...计数达到4,解除阻塞,所有线程都继续执行。...… 所有线程写入完毕,继续处理其他任务… 所有线程写入完毕,继续处理其他任务… 所有线程写入完毕,继续处理其他任务… 要点 构造方法有两种 CyclicBarrier(int parties) 默认构造方法

    41910

    垃圾回收及内存调试工具的介绍Android应用性能优化

    每一个级别的内存区域都有固定的大小,此后不断有新的对象被分配到此区域,这些对象总的大小快达到这一级别内存区域的阀值,会触发GC的操作,以便腾出空间来存放其他新的对象。...Eden区被对象填满,就会执行Minor GC。并把所有存活下来的对象转移到其中一个survivor区。 Minor GC同样会检查存活下来的对象,并把它们转移到另一个survivor区。...要想达到每秒60帧,这意味着每一帧你只有16ms=1000/60的时间来处理所有的任务。并且Android也确实会每16ms自动刷新界面,如果没刷新,跳过了几帧,大多数可能是性能优化不够。 ?...,点击Jump to Source,会跳转到对象所产生的类,而点击右侧圆形按钮,则会出现圆盘状图显示各个类的层级关系与所占大小。...通知栏里提示MainActivity已经发生了泄漏,我们点击进去查看详情会发现由于static类型的sTextView引用了mContext导致了MainActivity发生了内存泄漏,这就是LeakCanary

    1.1K10

    ViewModel

    二.VIewModel的生命周期特性   由于Android平台的特殊性,若应用程序支持横竖屏切换,那么当用户旋转手机屏幕的时候,我们还需要考虑数据的存储和恢复。...为了验证这一点,我们在ViewModel中创建一个计时器,每隔1s钟,通过接口OnTimeChangeListener通知它的调用者,通过这个示例来学习一下ViewModel的使用。   ...,在Activity中监听OnTimeChangeListener发来的通知据此更新UI界面。...可以看到,屏幕发生旋转的时候,计时器仍然在继续,这意味着横竖屏下的Activity对应的ViewModel是同一个,它所持有的数据一直存在着。...但同样需要注意的是,ViewModel不支持数据的持久化,界面被彻底销毁,ViewModel及其持有的数据就不存在了,但是onSavaInstanceState()方法没有这个限制,它可以持久化页面的数据

    22630

    Android可穿戴设备世界之旅

    ,从手表上得到答案真是太好了,有点像《钢铁侠》电影中的J.A.R.V.I.S.。 通知:与手表保持联系,一目了然地查看消息。 天气更新:不时获取更新的天气报告。 旅行:一目了然地接收您的旅行信息。...图 5:AVD 配置窗口 您的佩戴虚拟设备准备就绪,它将出现在 AVD 管理器窗口中。单击红色标记的启动按钮以启动模拟器。...正确的视图膨胀,将调用该方法,该方法使用 获取子视图的所需引用。...onTick CountDownTimer // Set countdown timer = new CountDownTimer(gameLengthInMillis, countDownInterval...; 接下来,我们需要抛出一个按钮事件,该事件将在每次点击刷新此随机方程。此外,我们还需要将用户输入的答案与其真实答案进行比较。此外,我们需要跟踪正确和错误的答案计算它们的数量。

    12110

    CountDownTimer_countdowntimer暂停

    一,概述 在项目开发中经常会用到倒计时这个功能,而Android也帮我们封装好了一个类CountDownTimer,给我们的开发带来了很大的方便; 二,API CountDownTimer (long...(millisLeft <= 0) { onFinish(); } else if (millisLeft < mCountdownInterval) { // 剩余时间小于一次时间间隔的时候,不再通知...lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime(); // 特殊情况:用户的onTick方法花费的时间比interval长,那么直接跳转到下一次...方法中如果判断到当前的时间未走完,那么会继续调用 sendMessageDelayed(obtainMessage(MSG), delay); 触发 onTick(millisLeft); 回调了Activity...=null){ dismiss(); } } 3,在使用CountDownTimer,在宿主Activity或fragment生命周期结束的时候,记得调用timer.cancle()方法 @Override

    1.5K30

    Android四大组件之Activity

    在应用程序退出,必须把所有任务栈中的 Activity 清除栈任务栈才会被销毁。当然任务栈可以移动到后台,并且保存每个 Activity 的状态。...Activity 实例对象添加到任务栈中,而且 Activity 的数据和信息状态都将会被保留 。...我们可以在 MainActivity 中添加一个按钮,点击按钮跳转到 SecondActivity,然后在 SecondActivity 中添加两个按钮,点击一个按钮跳转到 MainActvity,在另一个按钮的点击事件中添加如下代码...当我们在 MainActvity 中点击按钮跳转到 SecondActivity ,转到 SecondActivity 在点击第一个按钮跳转到 MainActivity ,不断重复这个操作。...最后跳转的 SecondActivity 点击第一个按钮获取当前任务栈中的 Activity 个数。下面是方法和其对应运行时对应结果。 ?

    91821

    Android 四大组件之Activity

    在应用程序退出,必须把所有任务栈中的 Activity 清除栈任务栈才会被销毁。当然任务栈可以移动到后台,并且保存每个 Activity 的状态。...Activity 实例对象添加到任务栈中,而且 Activity 的数据和信息状态都将会被保留 。...我们可以在 MainActivity 中添加一个按钮,点击按钮跳转到 SecondActivity,然后在 SecondActivity 中添加两个按钮,点击一个按钮跳转到 MainActvity,在另一个按钮的点击事件中添加如下代码...当我们在 MainActvity 中点击按钮跳转到 SecondActivity ,转到 SecondActivity 在点击第一个按钮跳转到 MainActivity ,不断重复这个操作。...最后跳转的 SecondActivity 点击第一个按钮获取当前任务栈中的 Activity 个数。下面是方法和其对应运行时对应结果。

    83800

    教育系统APP(一)

    AndroidStudio制作欢迎界面与应用图标 & Android-如何显示版本号制作3秒跳转页 本项目使用Android Studio 3.0.1作为开发工具,完成第一个任务。...今天做点击APP,进入欢迎界面,三秒后跳转主页,显示Helloworld,即可大功告成。点击APP的应用图标需要更换,不许使用系统默认图标。...欢迎界面与应用图标,显示版本号制作3秒跳转页 学习目标 掌握欢迎界面与应用图标以及显示版本号制作3秒跳转页的效果功能。 包结构: ?...--添加实现类--> ?...---- 若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一间进行处理。 ---- 请点赞!因为你们的赞同/鼓励是我写作的最大动力!

    69610

    彻底明白Activity启动模式-SingleTop、SingleTask、SingleInstance具体使用场景

    以前遇到过这样的Bug: 消息推送,通知栏弹出Notification,点击Notification跳转到指定Activity,但是如果我现在页面就停留在那个指定的Activity,会再次打开我当前的...当用户按下回退键,这个Activity就会被弹出栈,按下Home键回到桌面,再启动另一个应用,这时候之前那个Task就被移到后台,成为后台任务栈,而刚启动的那个Task就被调到前台,成为前台任务栈,手机页面显示的就是前台任务栈中的栈顶元素...在开始处,我们提到的2个Bug,可以用这种模式解决 消息推送 通知栏弹出Notification,点击Notification跳转到指定Activity,但是如果我现在页面就停留在那个指定的Activity....setNumber(1).build(); notify.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明通知被用户点击...以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。 3.

    3.5K30

    Android消息推送:手把手教你集成小米推送

    //注:应用在前台不弹出通知通知消息到达客户端也会回调函数 //作用:通过参数message从而获得通知消息,具体请看官方SDK文档 @Override public...//注:应用在前台不弹出通知通知消息到达客户端也会回调函数 //作用:1....//注:应用在前台不弹出通知通知消息到达客户端也会回调函数 //作用:通过参数message从而获得通知消息,具体请看官方SDK文档 @Override public..."); System.out.println("通知消息是"+message.toString()); } //用户手动点击通知栏消息时调用 //注:应用在前台不弹出通知通知消息到达客户端也会回调函数...推送:第三方消息推送平台详细解析 接下来,我会继续介绍具体如何在Android应用中集成相应的第三方推送功能(华为推送、极光推送、个推等等),有兴趣可以继续关注Carson_Ho的安卓开发笔记 ----

    4.6K20

    游戏优化系列一:海外谷歌应用适配相关

    Android Studio制作icon的教程,详见《游戏优化系列二-Android Studio制作图标教程》 示例: 2....例如在5.0以上的系统,出现这种风格是不行的: 这种风格才是符合要求的: 如果这些Dialog、Loading框不是使用系统风格,而是自行设计,则可以继续使用,不必进行额外处理; 例如: 具体实现方法有两种...="true" android:smallScreens="true" /> 6.返回按钮 返回按钮需具有返回功能,具有返回上一级内容、取消当前处理中的事务、退出游戏等作用。...具体情境: (1)在游戏启动、资源加载过程,点击系统返回按钮要求能够后退,或者弹框提示用户是否退出游戏;(部分应用在这过程屏蔽了系统按钮,出现被谷歌应用商店拒绝的情况) (2)活动弹窗显示点击返回系统按钮要求能够关闭弹窗...示例说明:点击返回按钮无法关闭弹窗 ​ ​

    10.7K40

    Android 点击通知栏消息打开activity,判断app是否运行

    android通知栏消息点击事件如果是打开一个activity,我们要考虑两种情况: 应用正在前台运行。 应用已退出。...对于第二种情况,我参照了很多app的做法,现总结为以下两种: 点击通知栏消息打开activity按下返回键后判断app是否启动,如果没有启动就要启动app; 点击通知栏消息判断app是否正在前台运行,.............. } 在onDestroy方法中判断该应用是否正在前台运行,但是这里只能用MainActivity是否存在任务栈里面判断,因为当你点击通知消息跳转到某个activity的时候,任务栈里该.../** * 启动App,为跳转到主页MainActivity的Intent写入打开通知的Intent,如果有通知的情况下 * * @param appStartActivity...(newIntent); } } catch (Exception e) { } } 最关键的一点,到这一步才处理点击通知消息真正要跳转到的页面

    3.3K10

    Android实现音乐播放进度条传递信息的两种方式(在service和activity中)

    实现播放的进度条显示,或是定时从service获取某些信息,是我们日常开发中经常遇到的需求,下面介绍音乐再service中运行时,activity如果获取音乐进度信息的两种方式: 一、在activity...) 我们需要在onCreate方法之前添加handler,这样才能保证当我们的activity被destroy之后,再重建可以第一间获取当前音乐的进度。...Studio那一坨巨大的黄色警告你也可以选择用原本的handler方法, //当前音乐播放进度 private static TextView nowTime; //音乐进度条 static...timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() {...ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

    2.3K30

    Android 多媒体开发学习之简单的音乐播放器

    既然我们的目的已经很明确,那我们先分析一下: 1: 我们播放音乐的任务可以放在Activity中吗?     ...b:如果采用BindService启动服务,但是BindService启动的服务,Activity退出,服务也会退出的。...,这样 以后还可以拖拽 既然需要每秒都使得进度条的进度改变,那就需要增加一个定时器,定时器每秒得到当前播放进度,然后通知UI显示更新 //添加定时器,用于每秒更新播放进度 public void addTimer...(msg); } //开始计时任务后的5毫秒,第一次执行run方法,以后每1000毫秒执行一次 }, 5, 1000); } } 这时候播放后,定时器获得到数据就会传送给...MainActivity用于显示: static Handler handler = new Handler() { public void handleMessage(android.os.Message

    70410

    笔记:Activity的启动过程

    那么Android系统是如何创建启动Activity的呢?本文就来 一探究竟。 NOTE:本文内容就是对老罗《Android系统源代码情景分析》章节的简化笔记。...用户点击桌面App图标后,Launcher根据对应App的信息,创建一个启动它的intent,调用startActivity()来启动它。...因为对Binder方法onTransact()的执行基本是(跨进程)在Binder线程池中的线程中执行的,可见这里定义mH就是为了供其它非主线程的操作转到主线程中执行。...如果延迟时间后新启动的App进程未通知AMS它启动完成,否则AMS不再继续处理MainActivity的启动。 阶段5 接下来就是android应用程序进程启动的过程。...这样AMS就继续执行启动MainActivity的操作。 AMS检查用来运行MainActivity的进程不存在,创建启动一个App进程。 新进程启动完成后,向AMS发送启动完成的进程间通信请求。

    1.3K80
    领券