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

来源:互联网 发布:高德地图 h5 js接口 编辑:程序博客网 时间:2024/04/27 17:16

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
  1. package com.example.service;  
  2.   
  3. import android.app.Service;  
  4. import android.content.Intent;  
  5. import android.graphics.PixelFormat;  
  6. import android.os.IBinder;  
  7. import android.view.Gravity;  
  8. import android.view.View;  
  9. import android.view.View.OnClickListener;  
  10. import android.view.WindowManager;  
  11. import android.view.WindowManager.LayoutParams;  
  12. import android.widget.ImageView;  
  13. import android.widget.Toast;  
  14.   
  15. import com.example.systemservicedemo.R;  
  16. import com.example.systemservicedemo.TestActivity;  
  17.   
  18. public class WmanService extends Service {  
  19.   
  20.     @Override  
  21.     public void onStart(Intent intent, int startId) {  
  22.         // 启动 后台服务  
  23.   
  24.         // 启动浮悬框  
  25.         getWindowService();  
  26.   
  27.         super.onStart(intent, startId);  
  28.     }  
  29.   
  30.     @Override  
  31.     public void onDestroy() {  
  32.         // 销毁  
  33.         super.onDestroy();  
  34.     }  
  35.   
  36.     @Override  
  37.     public IBinder onBind(Intent intent) {  
  38.         // TODO Auto-generated method stub  
  39.         return null;  
  40.     }  
  41.   
  42.     /** 
  43.      * WINDOW_SERVICE 管理打开窗口的程序 
  44.      *  
  45.      */  
  46.     private void getWindowService() {  
  47.   
  48.         WindowManager windowManager = (WindowManager) this  
  49.                 .getSystemService(WINDOW_SERVICE);  
  50.   
  51.         LayoutParams params = new LayoutParams();  
  52.         // 布局属性  
  53.         params.type = LayoutParams.TYPE_PHONE;  
  54.         // 同时设置多个属性:悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应  
  55.         // 不可触摸:LayoutParams.FLAG_NOT_TOUCHABLE  
  56.         params.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL  
  57.                 | LayoutParams.FLAG_NOT_FOCUSABLE;  
  58.   
  59.         // 设置背景  
  60.         params.format = PixelFormat.RGBA_8888;  
  61.         // 调整悬浮窗口至右侧中间  
  62.         params.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL;  
  63.         // 设置左上角为初始值  
  64.         params.x = 0;  
  65.         params.y = 0;  
  66.         // 设置悬浮窗口长宽数据  
  67.         params.width = WindowManager.LayoutParams.WRAP_CONTENT;  
  68.         ;  
  69.         params.height = WindowManager.LayoutParams.WRAP_CONTENT;  
  70.         ;  
  71.         // 加载View  
  72.         // LayoutInflater inflater=getLayoutInflater().from(this);  
  73.         View view = View.inflate(getApplicationContext(),  
  74.                 R.layout.windowmanager, null);  
  75.         ImageView imageView = (ImageView) view.findViewById(R.id.imageView1);  
  76.         // 添加点击事件  
  77.         imageView.setOnClickListener(new OnClickListener() {  
  78.   
  79.             @Override  
  80.             public void onClick(View v) {  
  81.                 // 回到主界面  
  82.                 Toast.makeText(getApplicationContext(), "我是小悬浮,正在跳转。。",  
  83.                         Toast.LENGTH_SHORT).show();  
  84.                 Intent intent = new Intent(getApplicationContext(),  
  85.                         TestActivity.class);  
  86.                 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  87.                 startActivity(intent);  
  88.   
  89.             }  
  90.         });  
  91.   
  92.         // 添加到管理器  
  93.         windowManager.addView(view, params);  
  94.   
  95.         // 移除  
  96.         // windowManager.removeView(view);  
  97.     }  
  98.   
  99. }  

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

[html] view plain copy
  1. <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />  
   

       (6)实现:Service 配置

[html] view plain copy
  1. <service android:name="com.example.service.WmanService" >  
  2.         </service>  

      (7)实现 :调用即可

[java] view plain copy
  1. Intent intent=new Intent(MainActivity.this,WmanService.class);  
  2.              startService(intent);  

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

     (1)系统服务 :ACTIVITY_SERVICE 

     (2)效果图

                                                           
        

 

        (3)基本思路

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

        (4)实现

[java] view plain copy
  1. /** 
  2.      * ACTIVITY_SERVICE 获得 运行中进程 第一个为当前运行测试的信息 管理应用程序的系统状态 
  3.      */  
  4.     private void getPackageIfo() {  
  5.         // 获取信息  
  6.         ActivityManager activitymanager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);  
  7.         List<RunningAppProcessInfo> infos = activitymanager  
  8.                 .getRunningAppProcesses();  
  9.         String packageInfo = "运行中的进程: \n";  
  10.   
  11.         for (RunningAppProcessInfo info : infos) {  
  12.             packageInfo += info.processName + "\n";  
  13.         }  
  14.         // 显示当前包名  
  15.         Toast.makeText(MainActivity.this"当前包名:" + infos.get(0).processName,  
  16.                 Toast.LENGTH_LONG).show();  
  17.         // 当前运行中的进程  
  18.         tv_show.setText("提示信息:" + packageInfo);  
  19.     }  


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

    还有8个 调用系统服务 实例:定位的实现 ,等 和 demo 下载 在下篇 ;

0 0
原创粉丝点击