您的位置:首页 > 移动开发 > Android开发

Android在Service中显示Dialog

2014-11-08 16:14 316 查看
出自于:http://blog.csdn.net/llbest1/article/details/19814737

众所周知在Activity中想要显示一个Dialog非常的简单,系统已经创建好了接口,只要实现即可。例如:

[java]
view plaincopyprint?





<SPAN style="FONT-FAMILY: Microsoft YaHei; FONT-SIZE: 18px">AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("AlertDialog");
builder.setMessage("1.TEST\n2.TESTTEST\n3.TESTTESTTEST");
builder.show();</SPAN>

<span style="font-family:Microsoft YaHei;font-size:18px;">AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("AlertDialog");
builder.setMessage("1.TEST\n2.TESTTEST\n3.TESTTESTTEST");
builder.show();</span>

非常的简单就可以显示一个dialog了。但是如果应用没有界面,只是一个Service,怎么样显示一个dialog呢?

回答也是非常的简单。

第1步:在应用的AndroidManifest.xml中加入两个权限。没有无法显示。

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />//一般用这个。

<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />//这个显示比较高。

第2步:在你的Service类中创建要显示的Dialog。代码如下:

[java]
view plaincopyprint?





private void showAlertDialog(Context mContext) {
//create ui

//use custom UI.
//View v = View.inflate(mContext, R.layout.activity_main, null);


AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("AlertDialog");
builder.setMessage("1.TEST\n2.TESTTEST\n3.TESTTESTTEST");
builder.setPositiveButton("Sure", null);
// builder.setView(v);//use custom view

AlertDialog dialog = builder.create();//need a <SPAN style="FONT-FAMILY: 'Microsoft YaHei'">AlertDialog</SPAN>

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//use alert.

// dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);

dialog.show();

//set dialog size and position.

/*WindowManager.LayoutParams lp=dialog.getWindow().getAttributes();
WindowManager wm=(WindowManager) getSystemService(WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
lp.width=(int) (display.getWidth()*0.8);
lp.height=(int) (display.getHeight()*0.5);
lp.x=0;
lp.y=0;
dialog.getWindow().setAttributes(lp);*/
}

private void showAlertDialog(Context mContext) {
		//create ui
		
		//use custom UI.
		//View v = View.inflate(mContext, R.layout.activity_main, null);
		
		AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
		builder.setTitle("AlertDialog");
		builder.setMessage("1.TEST\n2.TESTTEST\n3.TESTTESTTEST");
		builder.setPositiveButton("Sure", null);
		// builder.setView(v);//use custom view
		AlertDialog dialog = builder.create();//need a <span style="font-family:'Microsoft YaHei';">AlertDialog</span>
		dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//use alert.
		// dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
		dialog.show();
		
		//set dialog size and position.
		/*WindowManager.LayoutParams lp=dialog.getWindow().getAttributes();
		WindowManager wm=(WindowManager) getSystemService(WINDOW_SERVICE);
		Display display = wm.getDefaultDisplay();
		lp.width=(int) (display.getWidth()*0.8);
		lp.height=(int) (display.getHeight()*0.5);
		lp.x=0;
		lp.y=0;
		dialog.getWindow().setAttributes(lp);*/
	}

第3步:完成。即可在service中显示。最终显示效果如下:



第4步:总结:在Service中创建dialog和activity中创建是一样的只是给dialog增加了一个

[java]
view plaincopyprint?





dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: