android 360状态栏显示,Android项目仿UC浏览器和360手机卫士消息常驻栏(通知栏)...

本文主要是介绍android 360状态栏显示,Android项目仿UC浏览器和360手机卫士消息常驻栏(通知栏)...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前网上看了下自定义消息栏,通知栏,了解到了Notification这个控件,发现UC浏览器等都是这种类型,今天写个demo实现下,如图:

445ab7c812c32c0f5ff5774ce679a597.png

其中每个按钮都有不同的功能,代码如下:

package com.example.textwsjdemo;

import android.app.Activity;

import android.app.Notification;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.Bundle;

import android.view.KeyEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.RemoteViews;

import android.widget.Toast;

public class MainActivity extends Activity {

private Button bt_hehe;

private NotificationManager notificationManager;

private Notification notification;

private int icon;

private CharSequence tickerText;

private long when;

RemoteViews contentView;

private Intent intent;

private PendingIntent pendingIntent;

private int notification_id = 0;

private MyBroadCast receiver;

private static String ACTION = "a";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

receiver = new MyBroadCast();

IntentFilter filter = new IntentFilter();

filter.addAction("a");

filter.addAction("b");

filter.addAction("c");

filter.addAction("d");

registerReceiver(receiver, filter);

initView();

initData();

}

private void initData() {

icon = R.drawable.ic_launcher; // 通知图标

tickerText = "Hello"; // 状态栏显示的通知文本提示

when = System.currentTimeMillis(); // 通知产生的时间,会在通知信息里显示

}

private void initView() {

bt_hehe = (Button) findViewById(R.id.bt_hehe);

bt_hehe.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

// 启动提示栏

createNotification();

}

});

}

private void createNotification() {

notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

notification = new Notification();

notification.icon = icon;

notification.tickerText = tickerText;

notification.when = when;

/***

* 在这里我们用自定的view来显示Notification

*/

contentView = new RemoteViews(getPackageName(),

R.layout.notification_item);

contentView.setTextViewText(R.id.text11, "小说");

contentView.setTextViewText(R.id.text22, "视频");

contentView.setTextViewText(R.id.text33, "新闻");

contentView.setTextViewText(R.id.text44, "扯淡");

// contentView.setTextViewText(R.id.notificationPercent, "0%");

// contentView.setProgressBar(R.id.notificationProgress, 100, 0, false);

// //进度条

// contentView.setImageViewResource(R.id.image,R.drawable.more_advice);

// //加载图片

// contentView.setImageViewResource(R.id.image,R.drawable.more_attention);

// contentView.setImageViewResource(R.id.image,R.drawable.more_evaluate);

// contentView.setImageViewResource(R.id.image,R.drawable.more_about);

// contentView.setTextViewText(R.id.text,"Hello,this message is in a custom expanded view");

// //文本

notification.flags = Notification.FLAG_ONGOING_EVENT; // 设置常驻,不能滑动取消

//默认跳转的主界面

intent = new Intent(this, MainActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

//自定义跳转

contentView.setOnClickPendingIntent(R.id.ll_11, PendingIntent.getBroadcast(MainActivity.this, 11, new Intent().setAction("a"), PendingIntent.FLAG_UPDATE_CURRENT));

contentView.setOnClickPendingIntent(R.id.ll_22, PendingIntent.getBroadcast(MainActivity.this, 11, new Intent().setAction("b"), PendingIntent.FLAG_UPDATE_CURRENT));

contentView.setOnClickPendingIntent(R.id.ll_33, PendingIntent.getBroadcast(MainActivity.this, 11, new Intent().setAction("c"), PendingIntent.FLAG_UPDATE_CURRENT));

contentView.setOnClickPendingIntent(R.id.ll_44, PendingIntent.getBroadcast(MainActivity.this, 11, new Intent().setAction("d"), PendingIntent.FLAG_UPDATE_CURRENT));

notification.contentView = contentView;

notification.contentIntent = pendingIntent;

notificationManager.notify(notification_id, notification);

}

// 取消通知

private void cancelNotification() {

notificationManager.cancelAll();

}

@Override

protected void onDestroy() {

cancelNotification();

unregisterReceiver(receiver);

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK)) {

System.out.println("按下了back键 onKeyDown()");

cancelNotification();

}

return super.onKeyDown(keyCode, event);

}

class MyBroadCast extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

if(intent.getAction().equals("a")){

Toast.makeText(MainActivity.this, "11111111111111",

Toast.LENGTH_LONG).show();

startActivity(new Intent(MainActivity.this, ActivityText1.class));

}

if(intent.getAction().equals("b")){

Toast.makeText(MainActivity.this, "222222222222222",

Toast.LENGTH_LONG).show();

startActivity(new Intent(MainActivity.this, ActivityText2.class));

}

if(intent.getAction().equals("c")){

Toast.makeText(MainActivity.this, "333333333333",

Toast.LENGTH_LONG).show();

startActivity(new Intent(MainActivity.this, ActivityText3.class));

}

if(intent.getAction().equals("d")){

Toast.makeText(MainActivity.this, "4444444444444",

Toast.LENGTH_LONG).show();

startActivity(new Intent(MainActivity.this, ActivityText4.class));

}

}

}

}

以下是一些属性的设置:

/*

* 添加声音

* notification.defaults |=Notification.DEFAULT_SOUND;

* 或者使用以下几种方式

* notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");

* notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");

* 如果想要让声音持续重复直到用户对通知做出反应,则可以在notification的flags字段增加"FLAG_INSISTENT"

* 如果notification的defaults字段包括了"DEFAULT_SOUND"属性,则这个属性将覆盖sound字段中定义的声音

*/

/*

* 添加振动

* notification.defaults |= Notification.DEFAULT_VIBRATE;

* 或者可以定义自己的振动模式:

* long[] vibrate = {0,100,200,300}; //0毫秒后开始振动,振动100毫秒后停止,再过200毫秒后再次振动300毫秒

* notification.vibrate = vibrate;

* long数组可以定义成想要的任何长度

* 如果notification的defaults字段包括了"DEFAULT_VIBRATE",则这个属性将覆盖vibrate字段中定义的振动

*/

/*

* 添加LED灯提醒

* notification.defaults |= Notification.DEFAULT_LIGHTS;

* 或者可以自己的LED提醒模式:

* notification.ledARGB = 0xff00ff00;

* notification.ledOnMS = 300; //亮的时间

* notification.ledOffMS = 1000; //灭的时间

* notification.flags |= Notification.FLAG_SHOW_LIGHTS;

*/

/*

* 更多的特征属性

* notification.flags |= FLAG_AUTO_CANCEL; //在通知栏上点击此通知后自动清除此通知

* notification.flags |= FLAG_INSISTENT; //重复发出声音,直到用户响应此通知

* notification.flags |= FLAG_ONGOING_EVENT; //将此通知放到通知栏的"Ongoing"即"正在运行"组中

* notification.flags |= FLAG_NO_CLEAR; //表明在点击了通知栏中的"清除通知"后,此通知不清除,

* //经常与FLAG_ONGOING_EVENT一起使用

* notification.number = 1; //number字段表示此通知代表的当前事件数量,它将覆盖在状态栏图标的顶部

* //如果要使用此字段,必须从1开始

* notification.iconLevel = ; //

最后附上源码:源码下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持得牛网。

这篇关于android 360状态栏显示,Android项目仿UC浏览器和360手机卫士消息常驻栏(通知栏)...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/214745

相关文章

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook