Android项目仿UC浏览器和360手机卫士消息常驻栏(通知栏)

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

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

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 = ; //

最后附上源码:源码下载

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

(0)

相关推荐

  • Android中通过Notification&NotificationManager实现消息通知

    notification是一种让你的应用程序在没有开启情况下或在后台运行警示用户.它是看不见的程序组件(Broadcast Receiver,Service和不活跃的Activity)警示用户有需要注意的事件发生的最好途径. 1.新建一个android项目 我新建项目的 minSdkVersion="11",targetSdkVersion="19".也就是支持最低版本的3.0的. 2.习惯性地打开项目清单文件AndroidManifest.xml,添加一个权限:&

  • Android之开发消息通知栏

    一:先来效果图 二:实现步骤 1.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=&

  • Android消息通知栏的实现方法介绍

    背景知识:可以用Activity和Service来开始消息通知,两者的区别在于一个是在前台触发,一个是后台服务触发.要使用消息通知,必须要用到两个类:NotificationManager和Notification,其他NotificationManager的初始化是用getSystemService方法,并且通过notify方法来向android系统发送消息栏通知和显示.效果 :代码: 复制代码 代码如下: //消息通知栏        //定义NotificationManager     

  • android项目实现带进度条的系统通知栏消息

    我们在做Android开发的时候经常会遇到后台线程执行的比如说下载文件的时候,这个时候我们希望让客户能看到后台有操作进行,这时候我们就可以使用进度条,那么既然在后台运行,为的就是尽量不占用当前操作空间,用户可能还要进行其他操作,最好的方法就是在通知栏有个通知消息并且有个进度条.本文给一个例子工读者参考. 效果图如下: 主界面只有一个按钮就不上文件了 通知栏显示所用到的布局文件content_view.xml <?xml version="1.0" encoding="u

  • android使用NotificationListenerService监听通知栏消息

    NotificationListenerService是通过系统调起的服务,在应用发起通知时,系统会将通知的应用,动作和信息回调给NotificationListenerService.但使用之前需要引导用户进行授权.使用NotificationListenerService一般需要下面三个步骤. 注册服务 首先需要在AndroidManifest.xml对service进行注册. <service android:name=".NotificationCollectorService&q

  • Android项目仿UC浏览器和360手机卫士消息常驻栏(通知栏)

    之前网上看了下自定义消息栏,通知栏,了解到了Notification这个控件,发现UC浏览器等都是这种类型,今天写个demo实现下,如图: 其中每个按钮都有不同的功能,代码如下: package com.example.textwsjdemo; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.Pendin

  • Android仿UC浏览器左右上下滚动功能

    本文要解决在侧滑菜单右边加个文本框,并能实现文本的上下滑动和菜单的左右滚动.这里推荐可以好好看看android的触摸事件的分发机制,这里我就不详细讲了,我只讲讲这个应用.要实现的功能就像UC浏览器(或其它手机浏览器)的左右滚动,切换网页,上下滚动,拖动内容. 本文的效果: 一.功能要求与实现 1.功能要求: (1)手指一开始按着屏幕左右移动时,只能左右滚动菜单,如果这时手指一直按着,而且上下移动了,那么菜单显示部分保持不变,但文本框也不上下移动!                       (2

  • JS实现仿UC浏览器前进后退效果的实例代码

    测试浏览器为谷歌浏览器(谷歌toggle device toolbar) var startx, starty, endx, endy, moveX, moveY, seatX, seatY; var clickState = false; //获取输入框dom元素 var text = document.forms["form"]; //设置样式 function setCss(obj) { var cssStr = "z-index:5;width:37px;height

  • Android自定义控件实现UC浏览器语音搜索效果

    最近项目上要实现语音搜索功能,界面样式要模仿一下UC浏览器的样式,UC浏览器中有一个控件,会随着声音大小浮动,然后寻思偷个懒,百度一下,结果也没有找到类似的,只能自己动手了. 先上图看我实现的效果: 这是自定义控件的代码,里面注释也很明白,就不费话了 public class CustomCircleView extends View{ private Paint mPaint; private int strokeWidth = 0; //圆环的宽度 private Bitmap bitmap

  • Android使用自定义View实现360手机卫士波浪球进度的效果

    像360卫士的波浪球进度的效果,一般最常用的方法就是画线的方式,先绘sin线或贝塞尔曲线,然后从左到右绘制竖线,然后再裁剪圆区域. 今天我这用图片bitmap的方式,大概的方法原理是: (1)首先用clipPath裁剪园区域, (2)然后用4张图来不断绘制到画布上,再用偏移量来控制移动的速度,从而形成波浪动态效果. (3)有一点需要注意的是,裁剪圆的时候用到的clipPath这个方法,在android 4.1,和4.2等某些系统上,裁剪出来不是圆,而是矩形,针对这些系统 需要在manifest.

  • Android仿360桌面手机卫士悬浮窗效果

    大家好,今天给大家带来一个仿360手机卫士悬浮窗效果的教程,在开始之前请允许我先说几句不相干的话. 不知不觉我发现自己接触Android已有近三个年头了,期间各种的成长少不了各位高手的帮助,总是有很多高手喜欢把自己的经验写在网上,供大家来学习,我也是从中受惠了很多,在此我深表感谢.可是我发现我却从来没有将自己平时的一些心得拿出来与大家分享,共同学习,太没有奉献精神了.于是我痛定思痛,决定从今天开始写博客,希望可以指点在我后面的开发者,更快地进入Android开发者的行列当中. 好了,废话就说这么

  • android项目手机卫士来电显示号码归属地

    昨日实现了360手机卫士的来电显示归属地的功能,具体的功能就是当来电的时候,显示当前号码的归属地,学习之后发现操作 非常的简单,具体实现代码如下: AddressService.java package com.qingguow.mobilesafe.service; import com.qingguow.mobilesafe.utils.NumberQueryAddressUtil; import android.app.Service; import android.content.Int

  • Android静默安装实现方案 仿360手机助手秒装和智能安装功能

    之前有很多朋友都问过我,在Android系统中怎样才能实现静默安装呢?所谓的静默安装,就是不用弹出系统的安装界面,在不影响用户任何操作的情况下不知不觉地将程序装好.虽说这种方式看上去不打搅用户,但是却存在着一个问题,因为Android系统会在安装界面当中把程序所声明的权限展示给用户看,用户来评估一下这些权限然后决定是否要安装该程序,但如果使用了静默安装的方式,也就没有地方让用户看权限了,相当于用户被动接受了这些权限.在Android官方看来,这显示是一种非常危险的行为,因此静默安装这一行为系统是

  • Android实现360手机助手底部的动画菜单

    首先来看下我们实现的效果和360效果的对比: 360手机助手效果演示 本库实现的效果(Icon来自360手机助手,侵删) xml布局文件 注:为了美观,讲每个Button的高度以及固定,设置wrap_content时候是最大高度,为50dp,如果需要设置特定高度请参见下文的方法表格 <com.brioal.bottomtab.view.BottomLayout android:id="@+id/main_tab" android:layout_width="match_

  • Android 类似UC浏览器的效果:向上滑动地址栏隐藏功能

    思路 要求 ScrollView 嵌套 地址栏 和 WebView 手指滑屏向下滚动(网页向上),如果网页有滚动条,首先把 地址栏 滚动到消失,然后 WebView 才开始滚动: 手指滑屏向上滚动(网页向下),如果地址栏隐藏,那么 地址栏 首先慢慢显示,然后 WebView 才开始滚动. 实现方案 根据 View 的 onInterceptTouchEvent 和 onTouchEvent 原理.把 ScrollView 设置为 WebView 的一个变量,在 WebView的 onInterc

随机推荐