精华内容
下载资源
问答
  • 我们知道通知栏可以通过 PendingIntent 设置点击响应(也可以通过 RemoteView设置),如下: Intent intent = new Intent(mContext, NotificationReceiver.class); intent.setAction(NOTIFICATION_BROADCAST_ACTION...

    我们知道通知栏可以通过 PendingIntent 设置点击响应(也可以通过 RemoteView设置),如下:

    Intent intent = new Intent(mContext, NotificationReceiver.class);
                    intent.setAction(NOTIFICATION_BROADCAST_ACTION);
                    PendingIntent pendingIntent = PendingIntent
                            .getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                    notification.contentIntent = pendingIntent;
    

    但是,以上这样写,如果你的广播NotificationReceiver是动态注册的,就会无法响应点击事件,这个真的好坑,解决:Intent 换一种 new() 方式

    Intent intent = new Intent(NOTIFICATION_BROADCAST_ACTION);
                    PendingIntent pendingIntent = PendingIntent
                            .getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                    notification.contentIntent = pendingIntent;
    

    以上就可以响应点击事件。

    展开全文
  • android-21/... 文件中的onClick(View v)方法中会处理点击通知栏选项的事件: public void onClick(View v) { if (v == mSettingsButton) { startSettingsAct

    android-21/com/android/systemui/statusbar/phone/StatusBarHeaderView.java

    文件中的onClick(View v)方法中会处理点击通知栏选项的事件:

    public void onClick(View v) {
        if (v == mSettingsButton) {
            startSettingsActivity();
        } else if (v == mSystemIconsSuperContainer) {
            startBatteryActivity();
        } else if (v == mAlarmStatus && mNextAlarm != null) {
            PendingIntent showIntent = mNextAlarm.getShowIntent();
            if (showIntent != null && showIntent.isActivity()) {
                mActivityStarter.startActivity(showIntent.getIntent(), true /* dismissShade */);
            }
        }
    }
    其中看到showIntent.isActivity()用于判断这个PendingIntent类是否Activity类型的,若是,用startActivity的方式来启动该PendingIntent类中的intent,该intent通过getIntent()方法获得,可是没有对外开放。


    说到这里,如果希望点击通知栏来启动activity都是通过PendingIntent.getActivity(),然而这里貌似有个坑(http://blog.csdn.net/wangchun8926/article/details/39100661),而这个坑估计是和上述showIntent.getIntent()返回的intent还是旧的那个有关,具体原因有待查明。

    展开全文
  • 上一篇讲了如何创建并显示一个notification,这一篇就总结下点击notification后,程序应该如何响应。   一般来讲,点击一个notification后,都会打开一个Activity做为对点击事件的响应,这个Activity是之前在...

    上一篇讲了如何创建并显示一个notification,这一篇就总结下点击notification后,程序应该如何响应。

     

    一般来讲,点击一个notification后,都会打开一个Activity做为对点击事件的响应,这个Activity是之前在PendingIntent中设置好的。

    经常玩Android手机的应该都有印象,在日历应用中,你新建一个提醒,当提醒通知收到后,你点击通知,会进入提醒的内容页面,如果这个时候按back键,会直接退出应用。

    但是在Gmail的应用中,如果有一封新邮件到来,那么点击通知后,会进入到邮件的内容页面,等你看完邮件,点击back键,会退到邮件列表页面,再按back键,才会退出应用。

     

    我们总结一下两种情况,假设我们的应用有两个Activity(ParentActivity、SubActivity),notification中设置打开的Activity为SubActivity。

    那么第一种情况就是:

    点击Notification ——>进入SubActivity ——> back键 ——> 退出应用

    第二种情况:

    点击Notification ——>进入SubActivity ——> back键 ——> 退到ParentActivity ——>back键 ——>退出应用

     

    第一种情况比较简单,只需要在PendingIntent中指定Activity,不需要其他设置,Android默认的就这样。

     

    Java代码   收藏代码
    1. PendingIntent contentIntent = PendingIntent.getActivity(context, 0,  intent, PendingIntent.FLAG_CANCEL_CURRENT);  

    但是在创建PendingIntent的时候需要注意参数PendingIntent.FLAG_CANCEL_CURRENT

    这个标志位用来指示:如果当前的Activity和PendingIntent中设置的intent一样,那么久先取消当前的Activity,用PendingIntent中指定的Activity取代之。

    另外,需要在Manifest中对指定的Activity设置属性

     

    Java代码   收藏代码
    1. <activity android:name=".SubActivityl"  
    2.         android:launchMode="singleTask"  
    3.         android:taskAffinity=""  
    4.         android:excludeFromRecents="true">  
    5. </activity>  
     

     

    第二种情况稍微复杂点,因为如果只打开一个SubActivity,程序并没办法知道他的上一级Activity是谁,所以需要在点击Notification时打开一组Activity,但是我们并不需要一个个去调用startActivity方法,PendingIntent提供了个静态方法getActivities,里面可以设置一个Intent数组,用来指定一系列的Activity。

    所以我们首先写一个函数创建一个Activity数组:

     

    Java代码   收藏代码
    1. Intent[] makeIntentStack(Context context) {  
    2.     Intent[] intents = new Intent[2];  
    3. //API 11以上用
    4.     intents[0] = Intent.makeRestartActivityTask(new ComponentName(context, com.example.notificationtest.MainActivity.class));  
    5. // API 11以下用
    6. intents[0] = IntentCompat.makeRestartActivityTask(new ComponentName(context, com.example.notificationtest.MainActivity.class));
    7.     intents[1] = new Intent(context,  com.example.notificationtest.SubActivity.class);  
    8.     return intents;  
    9. }  

     

     其中需要注意的是Intent.makeRestartActivityTask方法,这个方法用来创建activity栈的根activity

    接下来,创建并显示Notification:

     

    Java代码   收藏代码
    1. void showNotification(Intent intent) {  
    2.     Notification notification = new Notification(  
    3.             R.drawable.status_icon,   
    4.             "Hello World ticker text",  
    5.             System.currentTimeMillis());  
    6.   
    7.     PendingIntent contentIntent = PendingIntent.getActivities(  
    8.             this,  
    9.             0,  
    10.             makeIntentStack(this),   
    11.             PendingIntent.FLAG_CANCEL_CURRENT);  
    12.     notification.setLatestEventInfo(  
    13.             this,   
    14.             "Title",  
    15.             "Hey, shall we have a dinner tonight",   
    16.             contentIntent);  
    17.     notification.flags |= Notification.DEFAULT_ALL;  
    18.   
    19.     mNM.notify(1, notification);  

    1. }  
    http://lovelydog.iteye.com/blog/1666340

    展开全文
  • 像酷狗在通知栏 有“上一首”,“下一首”等控制按钮,我们需要对按钮的点击事件进行响应,不过方法和之前的点击设置不一样,需要另外处理,下面我将进行简单的说明。 实现 同样,我们需要一个Service的子类...
  • Notification通知栏设置及其点击响应

    万次阅读 2016-12-13 17:26:26
    推荐相关文章:Android8.0 通知栏不显示及NotificationCompat.Builder()过时问题解决...1、新建好点击后跳转的类和布局(不需要跳转可跳过此步骤) 2、注册(养成良好习惯,每个活动都需要注册) 3、设置 Noti...

    转载请注明出处http://blog.csdn.net/mr_leixiansheng/article/details/53611805

    推荐相关文章:Android8.0 通知栏不显示及NotificationCompat.Builder()过时问题解决

    步骤:

    1、新建好点击后跳转的类和布局(不需要跳转可跳过此步骤)

    2、注册(养成良好习惯,每个活动都需要注册)

    3、设置 NotificationManager获取哪个服务

    4、设置Notification.Builder(通知栏各属性)

    5、设置“意图”

    6、创建Notification对象并获得Notification.Builder对象的属性

    7、通过NotificationManager对象的.notify显示通知栏

     

    代码如下:

    package com.example.administrator.notification;
    
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v7.app.AppCompatActivity;
    
    /**
     * Created by Administrator on 2016/12/13.
     */
    
    public class NotificationIntent extends AppCompatActivity {
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.notification_layout);
    
        }
    }
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/text"
            android:text="this is a notification Intent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </LinearLayout>

    2、注册

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.administrator.notification">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <activity android:name=".NotificationIntent"></activity>
        </application>
    
    </manifest>

    3、Notification实现

    package com.example.administrator.notification;
    
    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button button = (Button) findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //设置获取哪个服务
                    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                    Notification.Builder builder = new Notification.Builder(MainActivity.this);
    
                    builder.setSmallIcon(R.mipmap.ic_launcher);        //设置图标
                    builder.setContentTitle("标题");                    //设置标题
                    builder.setContentText("这是内容,点击我可以跳转");                 //消息内容
                    builder.setWhen(System.currentTimeMillis());         //发送时间
                    builder.setDefaults(Notification.DEFAULT_ALL);      //设置默认的提示音,振动方式,灯光
                    builder.setAutoCancel(true);                         //打开程序后图标消失
    
                    //跳转活动
                    Intent intent =new Intent (MainActivity.this,NotificationIntent.class);
                    PendingIntent pi = PendingIntent.getActivities(MainActivity.this, 0, new Intent[]{intent}, PendingIntent.FLAG_CANCEL_CURRENT);
                    builder.setContentIntent(pi);
                    //创建通知栏对象,显示通知信息
                    Notification notification = builder.build();
                    manager.notify(1, notification);
                }
            });
        }
    }
    

    还可以写成:

                    Intent intent = new Intent(this, NotificationActivity.class);
                    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
    
                    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                    Notification notification = new NotificationCompat.Builder(this)
                            .setSmallIcon(R.mipmap.ic_launcher)        //设置图标
                            .setContentTitle("标题")                    //设置标题
                            .setContentText("这是内容,点击我可以跳转")                 //消息内容
                            .setWhen(System.currentTimeMillis())         //发送时间
                            .setDefaults(Notification.DEFAULT_ALL)      //设置默认的提示音,振动方式,灯光
                            .setAutoCancel(true)                         //打开程序后图标消失
                            .setContentIntent(pendingIntent)              //设置点击响应
                        //显示所有内容
    //                        .setStyle(new NotificationCompat.BigTextStyle().bigText("Hello world Hello world Hello world Hello world " +
    //                                "Hello world Hello world Hello world "))
                        //显示图片
    //                        .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)))
                        .build();
                    manager.notify(1, notification);

     

    以上两种返回会直接退出程序,但是实际开发中我们想要其返回到我们指定的主界面,所以可以参考下面方法

       <activity
                android:name=".NotificationActivity"
                android:parentActivityName=".MainActivity">
                    Intent intent = new Intent(this, NotificationActivity.class);
    
                    //设置TaskStackBuilder
                    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
                    stackBuilder.addParentStack(NotificationActivity.class);
                    stackBuilder.addNextIntent(intent);
    
                    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    
                    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
                    Notification notification = new NotificationCompat.Builder(this)
                            .setSmallIcon(R.mipmap.ic_launcher)        //设置图标
                            .setContentTitle("标题")                    //设置标题
                            .setContentText("这是内容,点击我可以跳转")                 //消息内容
                            .setWhen(System.currentTimeMillis())         //发送时间
                            .setDefaults(Notification.DEFAULT_ALL)      //设置默认的提示音,振动方式,灯光
                            .setAutoCancel(true)                         //打开程序后图标消失
                            .setContentIntent(pendingIntent)              //设置点击响应
                            .build();
                    manager.notify(1, notification)

    Kotlin写法:

    package com.leixiansheng.kotlintest
    
    import android.app.Notification
    import android.app.NotificationManager
    import android.app.PendingIntent
    import android.app.TaskStackBuilder
    import android.content.Context
    import android.content.Intent
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import android.support.v4.app.NotificationCompat
    import kotlinx.android.synthetic.main.activity_main.*
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            btn.setOnClickListener {
                notification()
                finish()
            }
        }
    
        fun notification() {
            val intent = Intent(this,NotificationActivity::class.java)
            val manager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    
            val stackBuilder = TaskStackBuilder.create(this)
            stackBuilder.addParentStack(NotificationActivity::class.java)
            stackBuilder.addNextIntent(intent)
    
            val pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT)
    
            val notification = NotificationCompat.Builder(this)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("标题")
                    .setContentText("这是内容,点击我可以跳转")
                    .setAutoCancel(true)
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setWhen(System.currentTimeMillis())
                    .setContentIntent(pendingIntent)
                    .build()
    
            manager.notify(1,notification)
        }
    }
    

     

    展开全文
  • 自定义Notification添加点击事件

    千次阅读 2015-07-27 19:36:10
    前言在上一篇文章中《Notification自定义界面》中我们实现了自定义的界面,那么我们该怎么为自定义的界面添加点击事件呢?像酷狗在通知栏 有“上一首”,“下一首”等控制按钮,我们需要对按钮的点击事件进行响应,...
  • 这次在实现推送需求的时候,要用到android通知栏Notification点击后进入消息页面,因为要实现一个保存推送用户名字的功能,我在点击后处理了这个功能,但是测试发现我点击删除或者滑动清除后这个功能并没有执行,...
  • 上一篇讲了如何创建并显示一个notification,这一篇就总结下点击notification后,程序应该如何响应。 一般来讲,点击一个notification后,都会打开一个Activity做为对点击事件的响应,这个Activity是之前在...
  • Notification通知是在状态栏里显示的信息 一、Notification的实现:三步实现通知 1、定义通知: Notification mNotification = new Notification(R.drawable.logo,"后台搜索中...",System.currentTimeMillis()); 第...
  • 两种情况,第三种情况,类似于微信...点击Notification ——>进入secActivity——> back键 ——>退出应用 PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent...
  • 1. 当程序处于关闭状态收到推送消息时,点击图标会调用- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 这个方法,那么消息给通过launchOptions...
  • notification几种点击事件

    千次阅读 2015-11-11 20:01:50
    notification :以另一种UI界面形式展示出来,点击时可以对其应用做处理。 其常用的一些基本属性:setSmallIcon()设置图标 、setContentTitle()设置题目、setContentText()设置内容、setAutoCancel()设置...
  • 今天遇到一个很奇怪的问题,就是我们项目里的通知突然间失效了,具体表现是:通知栏能弹出通知提示,但是想通过它点击跳转到Activity确无法响应,也不消失,然后就抓耳挠腮的开始一点点debug调试找原因所在,始终无...
  • Android的Notification是android系统中很重要的一个机制, 产品人员常常利用通知栏的方式,跟用户进行弱沟通。拥有推送通知的app要比没有此类功能的app活跃率要高很多。另外类似于墨迹天气,清理大师等 app,也会将...
  • Notification

    千次阅读 2016-06-28 13:34:52
    NotificationNotification的通知栏常驻、各种样式、点击无效、禁止滑动删除、兼容低版本 Android的Notification是android系统中很重要的一个机制, 产品人员常常利用通知栏的方式,跟用户进行弱沟通。拥有推送...
  • 一般来讲,点击一个notification后,都会打开一个Activity做为对点击事件的响应,这个Activity是之前在PendingIntent中设置好的。 经常玩Android手机的应该都有印象,在日历应用中,你新建一个提醒,当提醒通知收到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,939
精华内容 6,375
关键字:

notification响应点击