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

Android-Service(系统服务概述 和 桌面浮悬窗,进程管理 等 实例)

2016-09-22 15:15 465 查看

1.回顾

上篇学习了 四大组件之一 Service 包括它的分类,生命周期和 一个音乐播放器的列子来理解 service ;

2.重点

(1)Android系统服务

(2)调用系统服务实例

3.Android系统服务

3.1 Android 系统服务

例如:

(1)ACTIVITY_SERVICE :管理应用程序的系统状态

(2)WINDOW_SERVICE : 管理打开窗口的程序

(3) LAYOUT_INFLATER_SERVICE :布局服务

(4)POWER_SERVICE : 电源服务

(5)AlarmManager :闹钟服务

(6)NOTIFICATION_SERVICE :通知栏服务 (前面已经使用过)

(7)LOCATION_SERVICE :位置服务

(8)CONNECTIVITY_SERVICE :网络连接服务

(9)WIFI_SERVICE :wifi 服务

(10)TELEPHONY_SERVICE :电话服务

这里就列举 这 10 个服务,一会要使用 这10个服务实现 实例;当然 还有 其他服务,不止这10个 ,其他的还有 锁屏服务等等 近27个服务 ;

3.2 使用

getSystemService(String name),根据NAME来取得对应的Object,然后转换成相应的服务对象。

4. 实例

4.1
实例 :浮悬窗

(1)使用的系统服务是 :WINDOW_SERVICE

(2)效果图 :



(3)基本思路

使用该服务 实现 windowManager 对象 ,后 通过 刚刚学习的 本地服务 Service 使其在 后台 运行即可;

注意:真机测试,需要在 应用管理中 设置浮选窗权限,默认是关闭的 ,也不提醒 ;

(4)实现:浮选窗 Service

[java]
view plain
copy

package com.example.service;

import android.app.Service;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
import android.widget.Toast;

import com.example.systemservicedemo.R;
import com.example.systemservicedemo.TestActivity;

public class WmanService extends Service {

@Override
public void onStart(Intent intent, int startId) {
// 启动 后台服务

// 启动浮悬框
getWindowService();

super.onStart(intent, startId);
}

@Override
public void onDestroy() {
// 销毁
super.onDestroy();
}

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}

/**
* WINDOW_SERVICE 管理打开窗口的程序
*
*/
private void getWindowService() {

WindowManager windowManager = (WindowManager) this
.getSystemService(WINDOW_SERVICE);

LayoutParams params = new LayoutParams();
// 布局属性
params.type = LayoutParams.TYPE_PHONE;
// 同时设置多个属性:悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应
// 不可触摸:LayoutParams.FLAG_NOT_TOUCHABLE
params.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE;

// 设置背景
params.format = PixelFormat.RGBA_8888;
// 调整悬浮窗口至右侧中间
params.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL;
// 设置左上角为初始值
params.x = 0;
params.y = 0;
// 设置悬浮窗口长宽数据
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
;
// 加载View
// LayoutInflater inflater=getLayoutInflater().from(this);
View view = View.inflate(getApplicationContext(),
R.layout.windowmanager, null);
ImageView imageView = (ImageView) view.findViewById(R.id.imageView1);
// 添加点击事件
imageView.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// 回到主界面
Toast.makeText(getApplicationContext(), "我是小悬浮,正在跳转。。",
Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(),
TestActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

}
});

// 添加到管理器
windowManager.addView(view, params);

// 移除
// windowManager.removeView(view);
}

}

(5)实现: 系统服务 权限设置

[html]
view plain
copy

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

(6)实现:Service 配置

[html]
view plain
copy

<service android:name="com.example.service.WmanService" >
</service>

(7)实现 :调用即可

[java]
view plain
copy

Intent intent=new Intent(MainActivity.this,WmanService.class);
startService(intent);

4.2 实例:获得系统App运行 进程

(1)系统服务 :ACTIVITY_SERVICE

(2)效果图



(3)基本思路

实现ActivityManager 对象 实现 获得系统服务 ;

(4)实现

[java]
view plain
copy

/**
* ACTIVITY_SERVICE 获得 运行中进程 第一个为当前运行测试的信息 管理应用程序的系统状态
*/
private void getPackageIfo() {
// 获取信息
ActivityManager activitymanager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> infos = activitymanager
.getRunningAppProcesses();
String packageInfo = "运行中的进程: \n";

for (RunningAppProcessInfo info : infos) {
packageInfo += info.processName + "\n";
}
// 显示当前包名
Toast.makeText(MainActivity.this, "当前包名:" + infos.get(0).processName,
Toast.LENGTH_LONG).show();
// 当前运行中的进程
tv_show.setText("提示信息:" + packageInfo);
}

5. 由于还有好几个实例 ,此篇幅到此为止

还有8个 调用系统服务 实例:定位的实现 ,等 和 demo 下载 在下篇 ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: