Android通知栏在手机中是很常见的,如音乐,微信收到消息的通知等。
下面我们就来讲解一下通知栏是如何创建的。
创建工程InformTest,布局文件很简单,就一个按钮。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_send"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建通知栏"/>
</RelativeLayout>
MainActivity中的代码:
public class MainActivity extends AppCompatActivity {
private Button btn_send;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_send = (Button) this.findViewById(R.id.btn_send);
btn_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取NotificationManager的实例
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//创建一个 Notification.Builder对象
Notification.Builder builder = new Notification.Builder(MainActivity.this);
//标题
builder.setContentTitle("通知");
//内容
builder.setContentText("今天是个好日子");
//图标
builder.setSmallIcon(R.mipmap.ic_launcher);
//通知被创建的时候顶部的提示
builder.setTicker("我被创建了");
//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间
builder.setWhen(System.currentTimeMillis());
Notification notification = builder.getNotification();
//显示通知,第一个参数是id
manager.notify(0, notification);
}
});
}
然后运行程序,点击创建通知栏按钮。顶部会弹一个 “我被创建了” 的提示。大概1秒后就会消失。
下拉系统状态栏就可以看到我们所设的图标,标题,内容,和通知栏创建的时间。如图:
我们创建通知栏的作用是什么呢,当然是为了点击之后有效果,但现在点击是没有作用的。
为了让通知栏有点击效果,我们在MainActivity添加如下代码即可:
//点击后启动Activity
Intent intent = new Intent(getApplicationContext(),InformActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
builder.setContentIntent(pendingIntent);
创建一个类InformActivity,并在清单文件中注册,布局文件中只有一个TextView。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="26dp"
android:text="我是被通知栏启动的界面"/>
</RelativeLayout>
然后重新运行程序,点击创建通知栏按钮,下拉系统菜单栏,点击通知栏发现进入了InformActivity界面。
这个时候会有一点问题,就是每点击一次通知栏,都会创建一个InformActivity界面。
所以修改InformActivity中代码如下,
public class InformActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_inform);
//获取NotificationManager的实例
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//取消通知
manager.cancel(0);
}
}
取消的方法中传入的id必须和创建通知栏的时候传入的id相同,不然是没有效果的咯。
再次运行程序,点击创建通知栏按钮,下拉系统菜单栏点击通知栏,跳到InformActivity界面。
下拉系统菜单栏发现通知栏已经消失了。
我们的通知栏效果到此也就完成了。如有错误请指出,谢谢!