Notification的用法 --- 状态栏通知发送一个状态栏通知必须的两个类:1 NotificationManager --- 状态栏通知的管理类,负责发通知,清除通知等NotificationManager : 是一个系统Service,必须通过 contextgetSystemService(NOTIFICATION_SERVICE)方法获取NotificationManager notificationManager = (NotificationManager) contextgetSystemService(androidcontentContextNOTIFICATION_SERVICE);2 Notification --- 具体的状态栏通知对象,可以设置icon,文字,提示音,震动等参数下面是设置一个通知需要的基本参数Anicon(通知的图标)Atitleanexpandedmessage(通知的标题和内容)APendingIntent(点击通知执行页面跳转)1创建Notification通过NotificationManager的notify(int Id , Notification)方法来启动Notification参数一:Notification的唯一标识参数二:Notification对象2更新Notification调用Notification的setLatestEventInfo()方法来更新内容,然后调用NotificationManager的notify()方法即可3删除Notification通过NotificationManager的cancle(int id) 方法,清除通知 参数: 要清除的Notification的唯一标识4Notification设置 -- 震动,铃声等1基本设置:123456789101112131415161718//新建状态栏通知baseNF=new Notification();//设置通知在状态栏显示的图标baseNFicon=Rdrawableicon;//通知时在状态栏显示的内容baseNFtickerText="YouclickedBaseNF!";//通知的默认参数DEFAULT_SOUND,DEFAULT_VIBRATE,DEFAULT_LIGHTS//如果要全部采用默认值,用DEFAULT_ALL//此处采用默认声音baseNFdefaults=NotificationDEFAULT_SOUND;//第二个参数:下拉状态栏时显示的消息标题expandedmessagetitle//第三个参数:下拉状态栏时显示的消息内容expandedmessagetext//第四个参数:点击该通知时执行页面跳转baseNFsetLatestEventInfo(Lesson_10this,"Title01","Content01",pd);//发出状态栏通知//ThefirstparameteristheuniqueIDfortheNotification//andthesecondistheNotificationobjectnmnotify(Notification_ID_BASE,baseNF);2添加声音baseNFdefault=NotificationDEFAULT_SOUND; -- 使用系统默认提示音notificationsound=Uriparse("file:///sdcard/notification/ringermp3"); --- 自定义声音使用用系统自带的铃声,可以这样:notificationsound=UriwithAppendedPath(AudioMediaINTERNAL_CONTENT_URI,"6");3添加震动notificationdefaults=NotificationDEFAULT_VIBRATE; 使用默认震动方式4添加闪光notificationdefaults=NotificationDEFAULT_LIGHTS;5其他有用的设置:12345678910111213141516flags:NotificationFLAG_INSISTENT;//让声音、振动无限循环,直到用户响应NotificationFLAG_AUTO_CANCEL;//通知被点击后,自动消失NotificationFLAG_NO_CLEAR;//点击'Clear'时,不清楚该通知(QQ的通知无法清除,就是用的这个//自定义下拉视图,比如下载软件时,显示的进度条。Notificationnotification=newNotification();notificationicon=Rdrawableicon;notificationtickerText="Custom!";RemoteViewscontentView=newRemoteViews(getPackageName(),Rlayoutcustom);contentViewsetImageViewResource(Ridimage,Rdrawableicon);contentViewsetTextViewText(Ridtext,"Hello,thismessageisinacustomexpandedview");notificationcontentView=contentView;//使用自定义下拉视图时,不需要再调用setLatestEventInfo()方法//但是必须定义contentIntentnotificationcontentIntent=pd;nmnotify(3,notification);应用实例一:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121根据activity的生命周期,在activity不显示时,会执行onStop函数(比如按下home键),所以你在onStop函数(按退出键除外)里面把notification放在通知栏里,再此显示时,把notification从通知栏里去掉。或者,只要程序在运行就一直显示通知栏图标。 下面对Notification类中的一些常量,字段,方法简单介绍一下:常量:DEFAULT_ALL 使用所有默认值,比如声音,震动,闪屏等等DEFAULT_LIGHTS 使用默认闪光提示DEFAULT_SOUNDS 使用默认提示声音DEFAULT_VIBRATE 使用默认手机震动说明:加入手机震动,一定要在manifestxml中加入权限:<uses-permission android:name="androidpermissionVIBRATE">以上的效果常量可以叠加,即通过notificationdefaults =DEFAULT_SOUNDDEFAULT_VIBRATE; notificationdefaults = DEFAULT_SOUND (最好在真机上测试,震动效果模拟器上没有) //设置flag位FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉FLAG_NO_CLEAR 该通知能被状态栏的清除按钮给清除掉FLAG_ONGOING_EVENT 通知放置在正在运行FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应 常用字段:contentIntent 设置PendingIntent对象,点击时发送该Intentdefaults 添加默认效果flags 设置flag位,例如FLAG_NO_CLEAR等icon 设置图标sound 设置声音tickerText 显示在状态栏中的文字when 发送此通知的时间戳 NotificationManager常用方法介绍:public void cancelAll() 移除所有通知(只是针对当前Context下的Notification)public void cancel(int id) 移除标记为id的通知 (只是针对当前Context下的所有Notification)public void notify(String tag ,int id, Notification notification) 将通知加入状态栏,标签为tag,标记为idpublic void notify(int id, Notification notification) 将通知加入状态栏,标记为id package comljqactivity; import androidappActivity;import androidappNotification;import androidappNotificationManager;import androidappPendingIntent;import androidcontentIntent;import androidgraphicsColor;import androidosBundle; public class MainActivity extends Activity { / Called when the activity is first created / @Override public void onCreate(Bundle savedInstanceState) { superonCreate(savedInstanceState); setContentView(Rlayoutmain); clearNotification(); } @Override protected void onStop() { showNotification(); superonStop(); } @Override protected void onStart() { clearNotification(); superonStart(); } / 在状态栏显示通知 / private void showNotification(){ // 创建一个NotificationManager的引用 NotificationManager notificationManager = (NotificationManager) thisgetSystemService(androidcontentContextNOTIFICATION_SERVICE); // 定义Notification的各种属性 Notification notification =new Notification(Rdrawableicon, "督导系统", SystemcurrentTimeMillis()); //FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉 //FLAG_NO_CLEAR 该通知不能被状态栏的清除按钮给清除掉 //FLAG_ONGOING_EVENT 通知放置在正在运行 //FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应 notificationflags = NotificationFLAG_ONGOING_EVENT; // 将此通知放到通知栏的"Ongoing"即"正在运行"组中 notificationflags = NotificationFLAG_NO_CLEAR; // 表明在点击了通知栏中的"清除通知"后,此通知不清除,经常与FLAG_ONGOING_EVENT一起使用 notificationflags = NotificationFLAG_SHOW_LIGHTS; //DEFAULT_ALL 使用所有默认值,比如声音,震动,闪屏等等 //DEFAULT_LIGHTS 使用默认闪光提示 //DEFAULT_SOUNDS 使用默认提示声音 //DEFAULT_VIBRATE 使用默认手机震动,需加上<uses-permission android:name="androidpermissionVIBRATE">权限 notificationdefaults = NotificationDEFAULT_LIGHTS; //叠加效果常量 //notificationdefaults=NotificationDEFAULT_LIGHTSNotificationDEFAULT_SOUND; notificationledARGB = ColorBLUE; notificationledOnMS =5000; //闪光时间,毫秒 // 设置通知的事件消息 CharSequence contentTitle ="督导系统标题"; // 通知栏标题 CharSequence contentText ="督导系统内容"; // 通知栏内容 Intent notificationIntent =new Intent(MainActivitythis, MainActivityclass); // 点击该通知后要跳转的Activity PendingIntent contentItent = PendingIntentgetActivity(this, 0, notificationIntent, 0); notificationsetLatestEventInfo(this, contentTitle, contentText, contentItent); // 把Notification传递给NotificationManager notificationManagernotify(0, notification); } //删除通知 private void clearNotification(){ // 启动后删除之前我们定义的通知 NotificationManager notificationManager = (NotificationManager) this getSystemService(NOTIFICATION_SERVICE); notificationManagercancel(0);
@param when The time to show in the time field In the SystemcurrentTimeMillis
timebase
when的意思,就是通知栏下拉后,左边显示的时间,所以一般用SystemcurrentTimeMillis
如果想定时启动通知,必须使用alarm之类的定时器,Notification 本身没有定时的功能!
long[] vibrate = {0,100,200,300};
震动的时候震动一会儿停一会儿,100,200,300就是每次震动的持续时间:毫秒
android计时器,时间计算器的实现方法,需要的朋友可以参考一下
需求:默认为"00:00:00",点击开始按钮时清零后开始计时,出现如10:28:34。点击停止的时候停止计时。
问题:使用Calendar
DateFormat的方法,不设置时区获取到的小时是本地时区的(东八区的就是8),设置成GMT标准时区获取到的时间是12小时(12:00:00),设置24小时制无效。
在开始时间加减各种小时都无效,而且计时只能到12小时就自动跳上去了,始终无法出现默认状态00:00:00开始计时的效果。
尝试各种时间设置方法无效后只能自己写一个根据秒数转换时间格式字符串的方法了,经过测试是没问题的,两位数只能显示99小时为最大,如需要更大小时数需要改改方法。
另外小时数也不能无限大,超过long数据类型长度会变成负数的,会出现异常的。
显示效果:
测试类:
复制代码
代码如下:
public class TestTime {
public
static void main(String[] args) {
TestTime tt = new
TestTime();
ttshowTimeCount(993600000+751000);
}
//时间计数器,最多只能到99小时,如需要更大小时数需要改改方法
public String
showTimeCount(long time) {
Systemoutprintln("time="+time);
if(time >=
360000000){
return "00:00:00";
}
String
timeCount = "";
long hourc = time/3600000;
String hour =
"0" + hourc;
Systemoutprintln("hour="+hour);
hour =
hoursubstring(hourlength()-2, hourlength());
Systemoutprintln("hour2="+hour);
long minuec =
(time-hourc3600000)/(60000);
String minue = "0" +
minuec;
Systemoutprintln("minue="+minue);
minue =
minuesubstring(minuelength()-2, minuelength());
Systemoutprintln("minue2="+minue);
long secc =
(time-hourc3600000-minuec60000)/1000;
String sec = "0" +
secc;
Systemoutprintln("sec="+sec);
sec =
secsubstring(seclength()-2, seclength());
Systemoutprintln("sec2="+sec);
timeCount = hour + ":" + minue +
":" + sec;
Systemoutprintln("timeCount="+timeCount);
return timeCount;
}
}
实际例子:
复制代码
代码如下:
//时间计数器,最多只能到99小时,如需要更大小时数需要改改方法
public String showTimeCount(long time) {
if(time >=
360000000){
return "00:00:00";
}
String
timeCount = "";
long hourc = time/3600000;
String hour =
"0" + hourc;
hour = hoursubstring(hourlength()-2,
hourlength());
long minuec =
(time-hourc3600000)/(60000);
String minue = "0" +
minuec;
minue = minuesubstring(minuelength()-2,
minuelength());
long secc =
(time-hourc3600000-minuec60000)/1000;
String sec = "0" +
secc;
sec = secsubstring(seclength()-2, seclength());
timeCount = hour + ":" + minue + ":" + sec;
return
timeCount;
}
private Handler stepTimeHandler;
private Runnable mTicker;
long startTime = 0;
//开始按钮
class startBtnListener implements OnClickListener {
@Override
public void onClick(View v) {
Button b =
(Button)v;
String buttonText =
bgetText()toString();
if("Start"equalsIgnoreCase(buttonText)){
bsetText("Stop");
// 清零 开始计时
stepTimeTVsetText("00:00:00");
stepTimeHandler = new
Handler();
startTime =
SystemcurrentTimeMillis();
mTicker = new Runnable()
{
public void run() {
String
content = showTimeCount(SystemcurrentTimeMillis() -
startTime);
stepTimeTVsetText(content);
long now =
SystemClockuptimeMillis();
long next = now + (1000
- now % 1000);
stepTimeHandlerpostAtTime(mTicker,
next);
}
};
//启动计时线程,定时更新
mTickerrun();
}else{
bsetText("Start");
//停止计时 Remove
any pending posts of Runnable r that are in the message
queue
stepTimeHandlerremoveCallbacks(mTicker);
}
}
}
用时间格式化的方式测试代码:
复制代码
代码如下:
//开始按钮 通过Calendar时间设置的方式,无法正常显示小时为0
class startBtnListener implements OnClickListener {
@Override
public void onClick(View v) {
Button b =
(Button)v;
String buttonText =
bgetText()toString();
if("Start"equalsIgnoreCase(buttonText)){
bsetText("Stop");
// 清零 开始计时
stepTimeTVsetText("00:00:00");
if (mCalendar == null)
{
mCalendar =
CalendargetInstance();
TimeZone tz =
TimeZonegetTimeZone("GMT");//GMT+8
mCalendarsetTimeZone(tz);
mCalendarget(CalendarHOUR_OF_DAY);//24小时制
}
stepTimeHandler = new Handler();
//SystemuptimeMillis()
//记录从机器启动后到现在的毫秒数,当系统进入深度睡眠时,此计时器将会停止
//SystemcurrentTimeMillis()
//返回自1970年1月1日到现在的毫秒数,通常用来设置日期和时间
//SystemelapsedRealtime()
//返回从机器启动后到现在的毫秒数,包括系统深度睡眠的时间,api里没有这个方法
//直接取得的是当地时区时间,当地时间跟时区有关,设置GMT后始终多12小时
startTime =
SystemcurrentTimeMillis();//123600000 - 363600000减掉或者加上12小时都不行
mTicker = new Runnable() {
public
void run() {
//这个减出来的日期是1970年的 时间格式不能出现00:00:00
12:00:00
long showTime = SystemcurrentTimeMillis()
- startTime;
Logi(TAG,showTime+"");
mCalendarsetTimeInMillis(showTime + 133600000 +
1000);
String content = (String)
DateFormatformat(mFormat, mCalendar);
stepTimeTVsetText(content);
long now =
SystemClockuptimeMillis();
long next = now + (1000
- now % 1000);
stepTimeHandlerpostAtTime(mTicker,
next);
}
};
//启动计时线程,定时更新
mTickerrun();
}else{
bsetText("Start");
//停止计时 Remove
any pending posts of Runnable r that are in the message
queue
stepTimeHandlerremoveCallbacks(mTicker);
}
}
}
private Handler stepTimeHandler;
Calendar
mCalendar;
String mFormat = "yyyy-MM-dd hh:mm:ss";//yyyy-MM-dd
long startTime = 0;
private Runnable mTicker;
通知栏显示所用到的布局文件content_viewxml
主运行类:
package yyytestandroid4;
import javautilTimer;
import javautilTimerTask;
import androidappActivity;
import androidappAlertDialogBuilder;
import androidappNotification;
import androidappNotificationManager;
import androidappPendingIntent;
import androidcontentDialogInterface;
import androidcontentIntent;
import androidcontentpmPackageManagerNameNotFoundException;
import androidosBundle;
import androidosHandler;
import androidosMessage;
import androidviewView;
import androidviewViewOnClickListener;
import androidwidgetButton;
import androidwidgetRemoteViews;
import androidwidgetToast;
public class TestAndroid4Activity extends Activity {
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
superhandleMessage(msg);
switch (msgwhat) {
case 0:
notifcontentViewsetTextViewText(Ridcontent_view_text1, len+"%");
notifcontentViewsetProgressBar(Ridcontent_view_progress, 100, len, false);
managernotify(0, notif);
break;
case 1:
ToastmakeText(TestAndroid4Activitythis, "下载完成", 0)show();
break;
default:
break;
}
}
};
private Button update,cancel;
private int localVersion,serverVersion;
private int len;
private NotificationManager manager;
private Notification notif;
/ Called when the activity is first created /
@Override
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutmain);
update = (Button) findViewById(Ridupdate);
updatesetOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//点击通知栏后打开的activity
Intent intent = new Intent(TestAndroid4Activitythis,OtherActivityclass);
PendingIntent pIntent = PendingIntentgetActivity(TestAndroid4Activitythis, 0, intent, 0);
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notif = new Notification();
notificon = Rdrawablelogo;
notiftickerText = "新通知";
//通知栏显示所用到的布局文件
notifcontentView = new RemoteViews(getPackageName(), Rlayoutcontent_view);
notifcontentIntent = pIntent;
managernotify(0, notif);
new DownLoadThread()start();
}
});
}
}
private class DownLoadThread extends Thread{
private Timer timer = new Timer();
@Override
public void run() {
// TODO Auto-generated method stub
superrun();
timerschedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Message msg = new Message();
msgwhat = 0;
msgobj = len;
handlersendMessage(msg);
if(len == 100){
timercancel();
handlersendEmptyMessage(1);
}
}
}, 0, 1000);
len = 0;
try {
while(len < 100){
len++;
Threadsleep(1000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
}
}
传奇私服顶端滚动公告通常是在游戏界面的最上方,用来通知玩家一些重要信息或活动公告。实现方法可以通过在游戏代码中添加相应的功能模块来实现。一般来说,控制顶端滚动公告需要用到前端开发技术,例如HTML、CSS和JavaScript。具体而言,可以通过CSS定义样式,通过JavaScript或jQuery实现滚动功能,通过PHP或其他服务器端语言实现公告的数据读取和更新。同时,可以考虑使用jQuery插件来实现这个功能,例如jQuery EasyTicker插件等。要实现顶端滚动公告需要很好的前端开发技术和游戏开发经验。
1用颜色区分联系人
在Galaxy S6 Edge中,用户可以将不同的重要联系人用不同颜色标记,比如红色是老板,蓝色是基友,绿色是女王大人。当这些联系人来电时,双侧曲面屏就会显示出特定的颜色,就算设备是背面朝上放置还是能轻松地通过颜色来识别出联系人,当然如果正忙不方便接听电话,直接按压背部的心率传感器就能直接拒接了。
2快速调出通知
在设置中选择需要在侧面曲面屏显示的应用通知后,这些通知就会自动隐藏在侧面并用不同颜色的标签作为区别,比如直接从右侧划出橙色标签就可快速回拨未接电话。
3夜钟(Night Clock)
打开夜钟功能后,用户可根据需要自行设定睡眠区间,晚上起来不用拿起手机就能从曲面屏快速查看还剩几小时的预定睡眠时间。
4查看通知
觉得屏幕顶部通知栏太窄显示不了太多内容没关系,Galaxy S6 Edge的曲面屏支持通知预览功能,只需在曲面屏处来回滑动即可快速查看电话、短信、社交应用甚至是球赛比分等通知。
5锁屏状态栏(Locked Phone Ticker)
在锁定状态下,除了前面提到的睡眠时间以外,Galaxy S6 Edge的曲面屏还能现实天气、新闻等其他信息。
6快速调出常用联系人
与通知类似,常用联系人也可用颜色进行标记,并以不同颜色的标签隐藏在侧面,滑动即可直接呼出。比如滑动绿色标签就显示女王大人,不管是发短信还是打电话都是十分快捷。
当然,除了上面提到的6个常用功能以外,Galaxy S6 Edge的曲面屏还拥有心情指示灯等小功能,同时三星在系统中还设置了曲面屏超时选项,防止曲面屏带来过度的电池消耗。
以上就是关于android studio中怎么设置点击按钮响应全部的内容,包括:android studio中怎么设置点击按钮响应、请问一下安卓编程里new Notification(icon, tickerText, when)的when起什么作用如何赋值及其种类、android中怎么使timecount自动开始计时等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)