default notification(请指定servicenotification或default怎么设置)

本文目录
- 请指定servicenotification或default怎么设置
- android notification自动消失
- 如何使用notification
- 通知栏白色图标 如何解决
- 安卓 service 中怎么用notification
- android怎么保证notification不重复
请指定servicenotification或default怎么设置
问题:当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。
在 System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)
在 System.Windows.Forms.MessageBox.Show(String text)
在 prjBOI_TRO.Shipping.frmTransin.Gen_QSMC_UPS_SCS_Transin(String strLoadID, Int32 intI)
在 prjBOI_TRO.Shipping.frmTransin.btnTransin_Click(Object sender, EventArgs e)
解决:根据Exception的StackTrace信息可以看出,问题出在MessageBox身上,于是将程式里的MessageBox.Show替换掉,问题解决。
PS:报错的程式是从winform系统中抽取出来的,然后设定了Windows Scheduled Task,而MessageBox没有对应修改掉。
android notification自动消失
这里不仅仅说的是 android notification自动消失的问题
关于Android NOtification 的使用
在 android 系统中,在应用程序可能会遇到几种情况需要通知用户,有的需要用户回应,有的则不需要,例如:
* 当保存文件等事件完成,应该会出现一个小的消息,以确认保存成功。
* 如果应用程序在后台运行,需要用户的注意,应用程序应该创建一个通知,允许用户在他或她的回应提供便利
* 如果应用程序正在执行的工作,用户必须等待(如装载文件),应用程序应该显示进度或等待提醒。
针对这些情况, android 都提供了不同的提醒方式。主要包括下面几种:
1. Toast Notification 是指出现在屏幕上的暂时性通知,这种通知用于传达一些告知类型的消息,短暂停留后会自动消失,无需用户交互。比如告知下载已完成等。 (Toast Noification 这个说法最早是源于一个前 MSN 员工的提法, 因为 MSN 的消息提醒是从底部向上轻弹,形式上很像一个面包从烤面包机中弹起的样子,所以称之为 Toast Noification 。 )
2. Status Bar Notification 是指以一个图标或者滚动条文本的形式出现在系统顶部状态栏上的通知。当应用程序处于后台运行状态时,这种方式比较合适。这种通知形式的好处是既能即使被关注到,又无需打断当前任务,可以从顶部下拉查看通知摘并做选择性处理。
3. Dialog Notification 类似于 iOS 的 Alert Notification ,以对话窗口的形式出现在屏幕上,用于重要或需及时处理的通知。
下面我们先了解以下 Android notification 的整个架构。前二种提醒方式都是由 NotificationManagerService ,而 Dialog Notification ,则是弹出一个窗口形 式实现的,因为这种提醒方式大多是针对当前应用程序或进程,所以它只是一种简单且直观的表达方式。
二、 Notification的使用
1.Toast
Toast 是 Android 中用来显示显示信息的一种机制,和 Dialog 不一样的是, Toast 是没有焦点的,而且 Toast 显示的时间有限,过一定的时间就会自动消失
Java代码
// 使用 TOAST 方法显示结果内容
Toast textToast=Toast.makeText(this, " 提示内容 ", Toast.LENGTH_LONG);
//... 这里也可以对 Toast 添加一些属性
textToast.show();
2. StatusBar Notification
StatusBar Notification 是在系统状态栏上 增加了一个状态栏图标,并在“通知“窗口中显示提示信息。当用户选择展开邮件, Android 就会发送一个通知(通常是推出一个活动)定义的意向。您也可以配置通知,提醒和声音,震动的用户,并在设备上闪烁的灯光。
这样的通知是很理想的工作时,您的应用程序在后台服务,需要通知有关事件的用户。如果您需要提醒有关事件已经发生,而你的活动仍可以在当前焦点,此时可以考虑使用一个对话框通知代替。
StatusBar Notification 基本步骤如下:
1 )得到 NotificationManager :
Java代码
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService( ns );
2 )创建一个新的 Notification 对象:
Java代码
Notification notification = new Notification();
notification.icon = R.drawable.notification_icon;
也可以使用稍微复杂一些的方式创建 Notification :
Java代码
int icon = R.drawable.notification_icon; //通知图标
CharSequence tickerText = "Hello"; // 状态栏 (Status Bar) 显示的通知文本提示
long when = System.currentTimeMillis(); // 通知产生的时间,会在通知信息里显示
Notification notification = new Notification(icon, tickerText, when) ;
3 )填充 Notification 的各个属性:
Java代码
Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
Notification 提供了丰富的手机提示方式:
a) 在状态栏 (Status Bar) 显示的通知文本提示,如:
Java代码
notification.tickerText = "hello";
b) 发出提示音,如:
Java代码
notification.defaults |= Notification.DEFAULT_SOUND;
notification.sound = Uri.parse("file:/ sdcard /notification/ringer.mp3");
notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
c) 手机振动,如:
Java代码
notification.defaults |= Notification.DEFAULT_VIBRATE;
long vibrate = {0,100,200,300};
notification.vibrate = vibrate ;
d)LED 灯闪烁,如:
Java代码
notification.defaults |= Notification.DEFAULT_LIGHTS;
notification.ledARGB = 0xff00ff00;
notification.ledOnMS = 300;
notification.ledOffMS = 1000;
notification.flags |= Notification.FLAG_SHOW_LIGHTS;
e) 添加 remote view
通过 RemoteViews 设置 notification 中 View 的属性
Java代码
notification.contentView = new RemoteViews(getApplication().getPackageName(), R.layout.custom_dialog);
notification.contentView.setProgressBar(R.id.pb, 100, 0, false);
notification.contentView.setTextViewText(R.id.tv, " 进度 " + _progress+ "%");
4 )发送通知:
Java代码
private static final int ID_NOTIFICATION = 1;
mNotificationManager.notify(ID_NOTIFICATION, notification);
3.Dialog Notification
3.1 AlertDialog
为了创建一个警告对话框,使用 AlertDialog.Builder 子类。通过 AlertDialog.Builder
(Context) 获取一个构造器然后使用这个类的公共方法来定义警告对话框的所有属性。当得到构造器后,通过 create(). 方法来获取警告对话框对象。有时我是不调用 create() 的,而是在设置好了后直接调用 show() 显示 AlertDialog 。
Java代码
AlertDialog.Builder builder=newAlertDialog.Builder(this);
builder.setMessage("Areyousureyouwanttoexit?") ;
AlertDialog alert=builder.create();
3.2 ProcessDialog
ProgressDialog 是 AlertDialog 类的一个扩展,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。
Java代码
ProgressDialog progressDialog=newProgressDialog(getApplicationContext());
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setIcon(R.drawable.alert_dialog_icon);
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(false);
如何使用notification
使用 HTML5 的 Notification API的方法:
1、申请权限
出于安全考虑,要发送桌面消息,需要先申请用户授权。Notification对象提供了一个静态的方法——requestPermission(),它接收一个回调函数作为参数,并把返回值传递给回调函数作为参数:
Notification.requestPermission(function(status){
if(Notification.permission !== status){
Notification.permission = status;
}
});
返回值为字符串,有以下三个值:
default
granted
denied
默认为default,也就是需要询问,表现和denied一样。
2、创建消息
用户授权以后,就可以通过下面方式创建一条桌面提醒了:
var n = new Notification(title, options);
options为字典,传入Notification对象的属性。
3、包含属性
Notification对象有如下几个只读属性:
dir(文字方向,经测试都不支持)
lang(语言)
body(消息体)
tag(标签)
icon(icon地址)
这几个属性都可以在创建消息的时候,作为option传入Notification构造函数。提一下tag属性,在有很多消息的时候,这个属性就非常有用,它会用拥有相同tag的最新的消息取代之前的消息,只显示一条最新的消息。比如在一个聊天室系统中,同时和几个人在聊天的时候,就可以以人名为tag显示不同人的最新消息。
4、定义事件
Notification对象有四个事件,分别是
onshow()
onclick()
onclose()
onerror()
分别在消息显示、被点击、被关闭和出错的时候被触发。下面的例子中完整的展示了这四个事件的使用。通常情况下,只需要处理点击事件就够了,比如点击消息后跳转到某一特定的页面。
举例说明:
window.addEventListener("load", function(){
if(Notification && Notification.permission !== "granted"){
Notification.requestPermission(function(status){
if(Notification.permission !== status){
Notification.permission = status;
}
});
}
var button = document.getElementsByTagName("button");
button.addEventListener("click", function(){
var t = new Date().toLocaleString();
var options={
dir: "ltr",
lang: "utf-8",
***隐藏网址***
body: "你好呀,欢迎留言交流呀"
};
if(Notification && Notification.permission === "granted"){
var n = new Notification("HUSTecho: "+ t, options);
n.onshow = function(){
console.log("You got me!");
};
n.onclick = function() {
alert("You clicked me!");
window.location = "/";
};
n.onclose = function(){
console.log("notification closed!");
};
n.onerror = function() {
console.log("An error accured");
}
}else if(Notification && Notification.permission !== "denied") {
Notification.requestPermission(function(status){
if(Notification.permission !== status){
Notification.permission = status;
}
if(status === "granted"){
for(var i = 0; i 《 3; i++){
var n = new Notification("Hi! " + i, {
tag: "Beyoung",
***隐藏网址***
body: "你好呀,我是第" + i +"条消息啦!"
});
}
}
});
}else{
alert("Hi!");
}
});
});
通知栏白色图标 如何解决
5.0以上,系统会自动将通知栏图标全部填充为白色,解决方法如下:
final NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);//TODO
//FLAG_UPDATE_CURRENT:如果构建的PendingIntent已经存在,则替换它,常用
final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);final Notification notification = new NotificationCompat.Builder(context) .setContentTitle(title) .setSmallIcon(R.drawable.ic_notification) .setContentText(content) .setDefaults(Notification.DEFAULT_ALL)//铃声、闪光、震动均系统默认。 .setContentIntent(pendingIntent) .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消 .build();mNotificationManager.notify(notificationId, notification);1234567891011121314
创建资源drawable和drawable-v21
1.drawable中放入和启动图标相同,名为ic_notification的图片
如:
2.drawable-v21中放入规矩形状的图片,命名为ic_notification
如:
简单来说就是把背景图层去掉
那么5.0以下会使用和启动图标相同的通知栏图标,5.0以上会使用简单的白色规矩图标,两种不同的图标
安卓 service 中怎么用notification
1. 通知的使用场合
当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。
2. 通知的创建步骤
(1)获取NotificationManager实例,可以通过调用Conten的getSystenService()方法得
到,getSystemService()方法接收一个字符串参数用于确定获取系统的哪个服务,
这里我们传入Context.NOTIFICATION_SERVICE 即可。获取NotificationManager实例如下:
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
(2)创建Notification对象,该对象用于存储通知的各种所需信息,我们可以使用它的有参构造函数来创建。构造函数有三个参数,第
一个参数指定通知图标,第二个参数用于指定通知的ticker
内容,当通知刚被创建的时候,它会在系统的状态栏一闪而过,属于一种瞬时的提示信息。第三个参数用于指定通知被创建的时间,以毫秒为单位,当下拉系统状态
栏时,这里指定的时间会显示在相应的通知上。创建一个Notification 对象可以写成:
Notification notification = new Notification(R.drawable.ic_launcher,"This is a ticker text",System.currentTimeMillis());
(3)调用Notification的setLatestEventIfo()方法对通知的布局进行设定,这个方法接收四个参数,第一个参数
是Context。第二个参数用于指定通知的标题内容,下拉系统状态栏就可以看到这部分内容。第三个参数用于指定通知的正文内容,同样下拉系统状态栏就可
以看到这部分内容。第四个参数用于指定实现通知点击事件的PendingIntent对象,如果暂时用不到可以先传入null。因此,对通知的布局进行设
定就可以写成:
notification.setLatestEventInfo(context, "This is content title", "This iscontent text", null);
(4)调用NotificationManager的notify()方法显示通知。notify()方法接收两个参数,第一个参数是id,
要保证为每个通知所指定的id 都是不同的。第二个参数则是Notification 对象,这里直接将我们刚刚创建好的Notification
对象传入即可。显示一个通知就可以写成:
manager.notify(1, notification);
3.代码示例
public class MainActivity extends Activity implements OnClickListener {
private Button sendNotice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendNotice = (Button) findViewById(R.id.send_notice);
sendNotice.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.send_notice:
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification(
R.drawable.ic_launcher, "This is a ticker text", System.currentTimeMillis());
notification.setLatestEventInfo(this, "This is content title",
"This is content text", null);
manager.notify(1, notification);
default:
break;
}
}
}
android怎么保证notification不重复
谷歌的通知提供了一个唯一的id参数,只要设置不同的id,就可以避免重复:
private
void
showNotification(String
title,
Context
context)
{
int
requestCode
=
(int)
System.currentTimeMillis();
NotificationManager
notificationManager
=
(NotificationManager)
context
.getSystemService(android.content.Context.NOTIFICATION_SERVICE);
Notification
notification
=
new
Notification(R.drawable.ic_launcher,
"90
上门洗车
",
System.currentTimeMillis());
notification.flags
=
Notification.FLAG_AUTO_CANCEL;
notification.defaults
|=
Notification.DEFAULT_VIBRATE;
notification.defaults
|=
Notification.DEFAULT_SOUND;
notification.defaults
|=
Notification.DEFAULT_LIGHTS;
notification.vibrate
=
new
long{0,
100,
200,
300};
Intent
intent
=
null;
if
(pushType
==
1)
{
intent
=
new
Intent(context,
Advertisement
.class);
}
else
if
(pushType
==
2)
{
intent
=
new
Intent(context,
HomePage.class);
}
else
if
(pushType
==
3)
{
intent
=
new
Intent(context,
OrderList.class);
}
PendingIntent
contentIntent
=
PendingIntent.getActivity(context,
0,
intent,
0);
notification.setLatestEventInfo(context,
"90上门洗车",
title,
contentIntent);
notificationManager.notify(requestCode,
notification);
}
在这里,我把notify()里面的id参数变成了
时间戳
,编译,运行

本文相关文章:
iostream报错(Xcode写C++提示’iostream’ file not found怎么回事!)
2026年9月22日 10:10
更多文章:
gcc编译器参数(深度linux的arm-linux-gnueabihf-gcc编译参数如何配)
2026年10月11日 19:30
asp是什么检查项目(医院血液检验项目RPR、TPPA、HIV-Ab各是什么意思)
2026年10月11日 10:20
汇编输出指令(用汇编语言循环指令在屏幕中间输出红底白字的“hello I am 720“)
2026年10月11日 07:20
本地搭建springboot项目(使用eclipse构建springboot项目)
2026年10月11日 06:20
java入门神器好用吗(java 7入门经典适合初学者自学用吗)
2026年10月11日 02:40
unix文件系统采用(Unix采用树形文件系统,其中“树形文件系统”什么意思)
2026年10月11日 00:50





