17.安卓通知

Posted 孤舟一夏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17.安卓通知相关的知识,希望对你有一定的参考价值。

实现结果如下

 

需要修改的地方有四个地方,

 

 

 

实现思想,

1.通知的实现,使用的是通知的管理者来发布notify方法来发布,

2.发布的是id和消息notification,

3.这个消息需要使用Notification.Builder来创建,

4.然后创建的过程当然就是那些设置标题啦,设置显示文本,

  是不是振动,显示图片,点击一下会不会消失,点击一下发生什么意图等等的属性

 

 

实现代码

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.xialm.message.MainActivity"

    android:orientation="vertical">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/button_sunny"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="晴空万里" />

        <Button
            android:id="@+id/button_cloud"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="阴云密布" />

        <Button
            android:id="@+id/button_rain"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="大雨连绵" />
    </LinearLayout>



    <Button
        android:id="@+id/button_clear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dip"
        android:text="清除Notification" />
</LinearLayout>
        

Java的逻辑代码

package com.example.xialm.message;

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 {

    private Button btnclear,btncloud,btnsunny,btnrain;
    //通知管理者
    private NotificationManager nm;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnclear = (Button)findViewById(R.id.button_clear);
        btncloud = (Button)findViewById(R.id.button_cloud);
        btnsunny = (Button)findViewById(R.id.button_sunny);
        btnrain = (Button)findViewById(R.id.button_rain);

        //系统服务都要getsystemservice,获得通知服务
        nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

        btnclear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                //使用设置的id号
                nm.cancel(1);
            }
        });

        btncloud.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                displayWeather("阴天", "天气预报", "阴云密布",R.drawable.cloud,1);
            }
        });

        btnrain.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                displayWeather("雨", "天气预报", "大雨连绵", R.drawable.rain,2);
            }
        });

        btnsunny.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                displayWeather("晴", "天气预报", "太阳真毒奥", R.drawable.sun,3);
            }
        });
    }

    //闪烁的字是ticktext,拽下来看到的标题是title,内容,图片
    //意思是在这里设置好了之后,在点击事件的时候直接调用display(众多参数)就可以了
    private void displayWeather(String tickerText,String title,String content,int drawable,int id){
        //一个消息创建的实例
        Notification.Builder builder = new Notification.Builder(MainActivity.this);

        //为上面的消息配置一个样式
        //1.小图标
        builder.setSmallIcon(drawable);
        //2.闪烁的时候闪一下什么
        builder.setTicker(tickerText);
        //显示标题是什么
        builder.setContentTitle(title);
        //显示的内容是什么
        builder.setContentText(content);
        //获得当前的系统时间
        builder.setWhen(System.currentTimeMillis());

        //缺省模式,全部采用默认
        //注意在这里设置选择了全部默认,但是默认的值中振动是被选中的,
        //所以一会还需要去mainfest中进行振动权限的打开
        //<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
        builder.setDefaults(Notification.DEFAULT_ALL);

        //打开图标之后是不是自动消失
        builder.setAutoCancel(true);

        //造一个Intent为了传给PendingIntent
        Intent intent = new Intent(this,MainActivity.class);
        //PendingIntent意思是未决定的行将发生的的一个Intent,是一个可以脱离了activity存在的Intent
        //其他的Intent存在的条件是activity仍在运行着,
        //由于现在的用途是作为上面弹出来的这么一个Intent那么他就要存在且不依附activity
        PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);

        //为现在创建的对象进行设置Intent
        builder.setContentIntent(pendingIntent);

        //创建对象。
        Notification nn = builder.getNotification();

        //通知管理者发布,开始进行发布,
        // 第一个id号的设置如果是一样的话,那么发送一个之后再发送一个的话会重合,
        //如果不一样就会叠加,即都显示到手机的通知栏里面,
        nm.notify(id,nn);

    }
}

 

 

 

 

 

 

 

以上是关于17.安卓通知的主要内容,如果未能解决你的问题,请参考以下文章

FCM 未收到通知消息

片段从一开始就没有显示 |安卓工作室

安卓。片段 getActivity() 有时返回 null

Titanium 在用户单击通知时如何运行一些代码? (安卓)

安卓推送通知

如何在不与 MainActivity 交互的情况下从通知中打开片段页面?