转载自:http://blog.youkuaiyun.com/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)
}
}