Dialog(七)——服务(Service)中弹出Dialog

简介: MainActivity如下: package cn.testservice1;import android.os.Bundle;import android.

MainActivity如下:

package cn.testservice1;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.content.Intent;
/**
 * Demo描述:
 * 在服务中显示对话框
 * 
 * 核心提示:
 * 为Dialog设置:
 * dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
 * 
 * 注意权限:
 * <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
 */
public class MainActivity extends Activity {
    private Button mStartButton;
    private Button mStopButton;
    private Intent intent;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}
    private void init(){
    	intent=new Intent();
    	intent.setAction("cc.test.com");
    	
    	//开启服务
    	mStartButton=(Button) findViewById(R.id.startButton);
    	mStartButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				startService(intent);
			}
		});
    	
    	//终止服务
    	mStopButton=(Button) findViewById(R.id.stopButton);
    	mStopButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				stopService(intent);
			}
		});
    }
	

}

ServiceSubclass如下:

package cn.testservice1;

import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.view.WindowManager;

public class ServiceSubclass extends Service {

	@Override
	public IBinder onBind(Intent arg0) {
		return null;
	}
	
	public void onCreate() {
		System.out.println("---> Service onCreate()");
	}
	
	@Override
	public void onStart(Intent intent, int startId) {
		super.onStart(intent, startId);
		System.out.println("---> Service onStart()");
	}
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		System.out.println("---> Service onStartCommand()");
		for (int i = 0; i < 10000; i++) {
			if (i==9527) {
				Builder builder=new Builder(getApplicationContext());
				builder.setTitle("Title");
				builder.setMessage("This is message");
				builder.setNegativeButton("OK", null);
				Dialog dialog=builder.create();
				dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
				dialog.show();
			}
		}
		return super.onStartCommand(intent, flags, startId);
	}
	
	@Override
	public void onDestroy() {
		super.onDestroy();
		System.out.println("---> Service onDestroy()");
	}

	
}

main.xml如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
   >

    <Button
        android:id="@+id/startButton"
        android:layout_width="200dip"
        android:layout_height="150dip"
        android:text="启动Service" 
     />
    
      <Button
        android:id="@+id/stopButton"
        android:layout_width="200dip"
        android:layout_height="150dip"
        android:text="停止Service" 
      />

</LinearLayout>

AndroidManifest.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.testservice1"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />
    
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="cn.testservice1.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <!-- 注册服务 -->
        <service android:name="cn.testservice1.ServiceSubclass">
            <intent-filter >
                <action android:name="cc.test.com"/>
            </intent-filter>
        </service>
    </application>

</manifest>


相关文章
|
开发工具 git
从 github 执行 git clone 一个大的项目时提示 error: RPC failed
目前克隆一个比较大的项目,出现RPC failed的错误 Cloning into 'bigfiles'... remote: Counting objects: 190, done. remote: Compressing objects: 100% (157/157), done.
4044 0
|
Android开发
android 常见错误:fabric connection timeout
android 常见错误:fabric connection timeout
获取apk的签名信息
在接入第三方功能时,经常要注册提交apk的签名信息 (sha1签名)?,下面列出相关步骤。 获取apk签名信息的步骤: 1)修改apk后缀名为zip,解压得到其中的META-INF文件夹; 2)把META-INF文件夹放到C盘根目录下; 3)在dos面板中,  敲入命令:  keytool -printcert -file C:\META-INF\CERT.
5839 0
|
存储 前端开发 测试技术
Android Kotlin中使用 LiveData、ViewModel快速实现MVVM模式
使用Kotlin实现MVVM模式是Android开发的现代实践。该模式分离UI和业务逻辑,借助LiveData、ViewModel和DataBinding增强代码可维护性。步骤包括创建Model层处理数据,ViewModel层作为数据桥梁,以及View层展示UI。添加相关依赖后,Model类存储数据,ViewModel类通过LiveData管理变化,而View层使用DataBinding实时更新UI。这种架构提升代码可测试性和模块化。
500 2
|
存储 NoSQL Java
比亚迪面试,全程八股!
比亚迪面试,全程八股!
301 3
|
Android开发
Android中下拉通知栏,Activity会走哪些生命周期?
我们就可以做一个总结:当前Activity中,下拉通知栏,是不走任何生命周期的。
392 0
|
Dart JavaScript Java
Flutter(二)——解析main.dart源码
Flutter(二)——解析main.dart源码
370 0
Flutter(二)——解析main.dart源码
|
传感器 编解码 监控
功耗优化 · 方案篇 · Android功耗优化指导规范
功耗优化 · 方案篇 · Android功耗优化指导规范
4377 0
功耗优化 · 方案篇 · Android功耗优化指导规范
|
Java Linux 开发工具
jdk(Windows/Mac含M1/M2 Arm原生JDK)安装,附各个版本JDK下载链接
jdk(Windows/Mac含M1/M2 Arm原生JDK)安装,附各个版本JDK下载链接
jdk(Windows/Mac含M1/M2 Arm原生JDK)安装,附各个版本JDK下载链接