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 实现通知栏显示多个notification

1、notifcation要显示多条,那么NotificationManager.notify( id, notify);  中的要保持不一样; 如果id值一样,那么就把之前的notify覆盖更...

android 使用Notification弹多个通知时,点击跳转intent取值时总是最后一个

最近开发中模块功能,使用NotificationManager触发多个Notification: private void showIMNotification(Context context, St...

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

@作者 : 西野奈留 @博客:http://blog.csdn.net/narunishino @声明:本文仅在【CSDN 博客】发表。...

android-Notification点击跳转Activity

> 在日历应用中,你新建一个提醒,当提醒通知收到后,你点击通知,会进入提醒的内容页面,如果这个时候按back键,会直接退出应用。 但是在Gmail的应用中,如果有一封新邮件到来,那么点击通知后,...
  • ShareUs
  • ShareUs
  • 2015年12月20日 16:37
  • 6174

Android中notification点击进入新activity重复的问题

Android中notification点击进入新activity,会打开多个相同activity,需要在Intent设置如下flag intent.setFlags(Intent.FL...
  • icewst
  • icewst
  • 2013年04月01日 09:26
  • 2199

android-Notification点击跳转指定的Activity

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

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

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

android-安装应用直接“打开”,home键返回桌面再次点击应用图标,重新启动MAIN_action的Activity

今天测试MM偶尔发现了这么个神奇的现象:给测试MM发了个应用安装包,MM安装后打开应用,进入主界面后,点击home键返回了桌面,然后从桌面再点击应用图标再次打开应用,这时候神奇的事情发生了~~~竟然打...

Android -- Notification,如何向通知栏发送通知,点击通知开启相应的Activity

1. 示例代码: 新老API之分, 新的API必须API16以后 4.1以后的系统

Android 关于Notification 点击启动流程分析

最近在项目中做了一个关于推送消息,点击进入指定页面的一个功能,相信大家都遇到过这种情形。比如在集成(极光/友盟/小米/华为)推送的时候,当收到消息的时候如何处理点击逻辑呢?看图:上面是我简单画的一个分...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中使用Notification并通过点击Notification重新启动Activity
举报原因:
原因补充:

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