Android使用通知(Notification)——方法过时的解决办法

   日期:2020-10-16     浏览:137    评论:0    
核心提示:今天照着《Android第一行代码第二版-郭霖》把通知那部分的代码实现了一下,结果发现 Notification notification = new NotificationCompat.Builder(this)过时了。我查了一下开发者文档,根据文档可以看到public Builder (Context context)已经过时了,需要在原来的基础上加上一个参数String类型的channelId...

今天照着《Android第一行代码第二版-郭霖》把通知那部分的代码实现了一下,结果发现 Notification notification = new NotificationCompat.Builder(this)过时了。

我查了一下开发者文档,根据文档可以看到public Builder (Context context)已经过时了,需要在原来的基础上加上一个参数String类型的channelId。对于这个channelId,文档里并没有说明这个的具体含义,只是说通知将发布在此NotificationChannel???

不管了先随便设一个值看看效果,代码如下,布局文件的代码就不贴出来了,就一个按钮。

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;


import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    NotificationManager manager ;

    @Override
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button sendNotice = findViewById(R.id.send_notice);
        sendNotice.setOnClickListener(this);
        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    }

    @Override
    public void onClick(View view) { 

        switch (view.getId()){ 
            case R.id.send_notice:
                Notification notification = new NotificationCompat.Builder(this,"myChannelId")
                        .setContentTitle("This is content title")
                        .setContentText("This is content text")
                        .setWhen(System.currentTimeMillis())
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                        .build();
                manager.notify(1,notification);
                break;
            default:
                break;

        }
    }
}

运行结果如下:

根据查看别的博客才知道要为通知注册渠道,要不然不会发出通知,代码修改如下:


import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;


import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    NotificationManager manager ;

    @Override
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button sendNotice = findViewById(R.id.send_notice);
        sendNotice.setOnClickListener(this);
        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    }

    @Override
    public void onClick(View view) { 

        switch (view.getId()){ 
            case R.id.send_notice:
                //高版本需要渠道
                if(Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O){ 
                    //只在Android O之上需要渠道
                    NotificationChannel notificationChannel = new NotificationChannel("myChannelId","channelname"
                            ,NotificationManager.IMPORTANCE_HIGH);
                    //如果这里用IMPORTANCE_NOENE就需要在系统的设置里面开启渠道,通知才能正常弹出
                    manager.createNotificationChannel(notificationChannel);
                }
                Notification notification = new NotificationCompat.Builder(this,"myChannelId")
                        .setContentTitle("This is content title")
                        .setContentText("This is content text")
                        .setWhen(System.currentTimeMillis())
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                        .build();
                manager.notify(1,notification);
                break;
            default:
                break;

        }
    }
}

关键代码就在下面这段代码,其目的就是为了注册渠道,之后就可以使用这个channelId来发通知了。

    if(Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O){ 
                    //只在Android O之上需要渠道
                    NotificationChannel notificationChannel = new NotificationChannel("myChannelId","channelname"
                            ,NotificationManager.IMPORTANCE_HIGH);
                    //如果这里用IMPORTANCE_NOENE就需要在系统的设置里面开启渠道,通知才能正常弹出
                    manager.createNotificationChannel(notificationChannel);
                }

结果如下:

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服