Android中使用Notification并通过点击Notification重新启动Activity

转载 2012年03月22日 16:35:36

我们在使用别的软件的时候,经常会看到在手机的最头部有一个小图标,表示程序依然在启动着。比如一些音乐播放软件天天动听,还有服务程序正点工具箱,还有腾讯QQ等。本文就带您来了解一些如何做到这些功能。

相关知识点为:
NotificationManager,getSystemService,NOTIFICATION_SERVICE,getBaseContext,Notification,

Class.forName,setFlags,FLAG_ACTIVITY_SINGLE_TOP,PendingIntent,setLatestEventInfo,FLAG_ONGOING_EVENT,notify,cancel.

 

//两个参数,第一个为一个图标的ID,第二个为一个字符串对应的ID
    public void StartNM(int icoID,int strID)
    {
        //获取到系统服务中的通知服务NOTIFICATION_SERVICE
        nManager = (NotificationManager)getSystemService(getBaseContext().NOTIFICATION_SERVICE);
        //将字符串传化为Notification所需用的格式CharSequence
        CharSequence str = getBaseContext().getText(strID);
        //新建一个通知对象
        Notification notification = new Notification(icoID,str,System.currentTimeMillis());
 
        Intent intent = null;
        try {
            intent = new Intent(this,Class.forName("com.jouhu.gpsservice.GPSServiceActivity"));
            intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            //PendingIntent为一个特殊的Intent,通过getBroadcast或者getActivity或者getService得到.
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
            notification.setLatestEventInfo(this, str, str, pendingIntent);
            notification.flags |= Notification.FLAG_ONGOING_EVENT;
            //启动通知事件
            nManager.notify(strID, notification);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
    //
    public void StopNM(int strID)
    {
        //获取到系统服务中的通知服务NOTIFICATION_SERVICE
        nManager = (NotificationManager)getSystemService(getBaseContext().NOTIFICATION_SERVICE);
        nManager.cancel(strID);
    }

在我们的按钮事件里面通过以下方法就可以启动和关闭了。

StartNM(R.drawable.logo,R.string.app_name);
//以及
StopNM(R.string.app_name);

里面还涉及到一些步骤。
1 制作一个16 * 16 的logo.PNG文件放到res/drawable-hdpi,res/drawable-ldpi,res/drawable-mdpi文件夹中,刷新本项目,在gen/com.jouhu/gpsservice中就会生成一个logo的

id了,程序中就可以使用R.drawable.logo调用了


2 注意,我们需要使用类的全名来创建这个Intent,否则会出现找不到的情况。

new Intent(this,Class.forName("com.jouhu.gpsservice.GPSServiceActivity"));

3 注意要加这个代码

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

the activity will not be launched if it is already running at the top of the history stack.
解释为Activity不会被多次执行。
4 在开发音乐类程序的时候,我们需要考虑当Activity关闭的时候,下次启动音乐程序,需要继续当前的音乐,所有需要将当前的信息传递到重新启动的Activity中。

How to send parameters from a notification-click to an activity?文章提到了解决这个问题的思路。

For managing if the activity is already running you have two ways:
>>如果Activity已经运行有两种方法

Add FLAG_ACTIVITY_SINGLE_TOP flag to the Intent when launching the activity, and then in the activity class implement onNewIntent(Intent intent) event handler, that way you can access the new intent that was called for the activity (which is not the same as just calling getIntent(), this will always return the first Intent that launched your activity.
>>当启动Activity的时候添加FLAG_ACTIVITY_SINGLE_TOP到Intent(本代码已经包含),在Activity类中实现onNewIntent的事件处理。
Same as number one, but instead of adding a flag to the Intent you must add “singleTop” in your activity AndroidManifest.xml.

<activity    android:name=".ArtistActivity"    android:label="Artist"    android:launchMode="singleTop"></activity>

ANDROID之路-Android_点击Notification打开一个Activity的两种方式

@作者 : 西野奈留 @博客:http://blog.csdn.net/narunishino @声明:本文仅在【CSDN 博客】发表。...
  • NaruNishino
  • NaruNishino
  • 2015年11月28日 11:22
  • 1082

Android notification 的使用,可点击,并且进入Activity不走onCreate()方法。

Notification在程序中主要起到一个通知的作用,就是我们平时下拉托盘上面可以查看的一些状态信息。 添加一个Notification只需下面几个步骤: 1、 获取Notification的服务:...
  • lisineng
  • lisineng
  • 2015年01月29日 13:53
  • 1612

android-Notification点击跳转指定的Activity

今天项目中有这样的一个需求,当程序还没被进程“杀死”的时候,后台推送来了一则消息,这时候不管是程序在前台运行,还是后台中,需要我们以通知栏的方式来通知用户。 对于通知栏,用户操作后有两种情况。 1...
  • caohuicong
  • caohuicong
  • 2017年03月10日 14:10
  • 5426

Android Uri外部启动app或者notification启动

一、自定义Uri与外部启动 1、概述 上篇我们讲了Uri的结构,在这篇中,我们将看看如何利用自定义的URI来启动我的的应用。 有时,我们要通过外部Uri链接来启动我们的应用,主要是通过Uri隐式I...
  • bianzhiguo6
  • bianzhiguo6
  • 2016年10月14日 17:45
  • 274

android notification通知栏方式更新APP

这次是我第一次写博客哦,各位程序猿们,下面是我自己写的一个像支付宝一样在通知栏弹出notification来动态实时更新的小组件,里面用了广播接收者和service组件. 话不多说,直接上代码啦. 首...
  • a331977552
  • a331977552
  • 2015年11月15日 10:18
  • 2299

从Notification启动intent导致新建Activity的问题【已解决】

问题描述:
  • nzfxx
  • nzfxx
  • 2016年08月23日 17:56
  • 771

Android 点击通知栏中的通知启动应用

今天再做项目中遇到一个问题: "点击通知时, 应用不能启动", 源码如下:  Context application = getApplicationContext(); Intent resul...
  • voo00oov
  • voo00oov
  • 2015年05月15日 11:18
  • 3518

Android中使用Notification并通过点击Notification重新启动Activity

我们在使用别的软件的时候,经常会看到在手机的最头部有一个小图标,表示程序依然在启动着。比如一些音乐播放软件天天动听,还有服务程序正点工具箱,还有腾讯QQ等。本文就带您来了解一些如何做到这些功能。 相...
  • xiaoxujie2007_
  • xiaoxujie2007_
  • 2012年03月22日 16:35
  • 10541

Android 5.1 ActivityManagerService启动

ActivityManager主要功能有: ①启动或杀死应用程序进程。 ②启动调度Activyty生命周期。 ③注册Broadcast Receiver,接收分发Broadcast。 ④启动发布Con...
  • u010083774
  • u010083774
  • 2016年02月02日 22:17
  • 851

关于Android Notification有时不能正常打开Activity的问题总结

之前项目开发中用到push功能。使用场景也是比较平常的用法,就是每一个Notification点击跳转到指定的Activity页面。但是也遇到一些问题导致没法正常通过PendingIntent打开相应...
  • kyzy0615
  • kyzy0615
  • 2016年08月04日 14:38
  • 486
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中使用Notification并通过点击Notification重新启动Activity
举报原因:
原因补充:

(最多只允许输入30个字)