Android中的各种Manager

由于在发开过程中,经常用到各种Manager,故将其整理,以便复习。

大多为复制,后期自己整理。


在Android中,Manager的含义更应该翻译为经纪人,Manager所manage的对象是服务本身,因为每个具体的服务一般都会提供多个API接口,而Manager所manage的正是这些API。客户端一般不能直接通过Binder引用去访问具体的服务,而是要经过一个Manager,相应的Manager类对客户端是可见的,而远程的服务类对客户端则是隐藏的。


想介绍几个涉及或者用到的Manager:

1PowerManager:主要是用来控制电源状态,设置屏幕状态,和电池待机状态

           PowerManager  pm = ((PowerManager)getSystemService(POWER_SERVICE));

           这里我需要保持屏幕长期唤醒,不被锁屏,所以我调用WakeLock。

           WakeLock wake = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK |                          

                                                                          Powe r Manager.ON_AFTER_RELEASE, **Activity.class );

           wake.acquire();//请求执行

           ps:一些相关的flag

           PARTIAL_WAKE_LOCK         : 保持CPU 运转,屏幕和键盘灯有可能是关闭的。

           SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯

           SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯

           FULL_WAKE_LOCK              : 保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度

 

      权限获得:

Java代码   收藏代码
  1. <uses-permission android:name="android.permission.WAKE_LOCK" /  

 


2、屏幕亮度:

    我的需求由于实验室机器全天24小时运转,所以我们需要保持屏幕亮度最低,而不是每次都是手动去调节每个手机,所以我的需求就是安装启动本小应用就要将屏幕亮度跳到最低。

    起初我调用window,设置window里面screenBrightness参数的值,但却短暂设置屏幕亮度的亮度,在某个activity下面才可以生效。

          

Java代码   收藏代码
  1. /** 
  2.      * 设置屏幕亮度 
  3.      */  
  4.     private void setWindowScreen(){  
  5.         Window localWindow = getWindow();    
  6.         WindowManager.LayoutParams localLayoutParams = localWindow.getAttributes();    
  7.         float f = 5 / 255.0F;    
  8.         localLayoutParams.screenBrightness = f;    
  9.         localWindow.setAttributes(localLayoutParams);   
  10.     }  

     需要获得权限:

Java代码   收藏代码
  1. <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />  

 

    不过在调用前要先把其设定为手动,看下面代码,进行设置调节,也很容易查看就不多解释了

     

Java代码   收藏代码
  1. /**  
  2. * 获得当前屏幕亮度的模式      
  3. * SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节屏幕亮度  
  4. * SCREEN_BRIGHTNESS_MODE_MANUAL=0  为手动调节屏幕亮度  
  5. */    
  6. private int getScreenMode(){  
  7.    int screenMode = 0;  
  8.    try{  
  9.    screenMode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);  
  10.    }catch(Exception e){  
  11.        e.printStackTrace();  
  12.   }  
  13.      return screenMode;  
  14.  }  
  15.           
  16.      /**  
  17.        * 设置当前屏幕亮度的模式      
  18.        * SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节屏幕亮度  
  19.        * SCREEN_BRIGHTNESS_MODE_MANUAL=0  为手动调节屏幕亮度  
  20.        */    
  21.      private void setScreenMode(int paramInt){    
  22.         try{    
  23.             Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, paramInt);    
  24.          }catch (Exception localException){    
  25.             localException.printStackTrace();    
  26.          }    
  27.      }   
  28.   
  29. //相关权限  
  30. <uses-permission android:name="android.permission.WRITE_SETTINGS" />  

       结果发现只有在当前activity下生效,当这个小应用关掉后屏幕又恢复了,所以我就重新查找,需要改动系统文件下面的相关数值,调用Uri(类似链接)方法

Java代码   收藏代码
  1. /**  
  2.   * 保存屏幕亮度最低 
  3.   * save light state 
  4.   **/  
  5.  public  void saveBrightness(ContentResolver resolver) {  
  6.     Uri uri = android.provider.Settings.System.getUriFor("screen_brightness");    
  7.     android.provider.Settings.System.putInt(resolver, "screen_brightness"0);  
  8.     resolver.notifyChange(uri, null);  
  9.  }  

  



3、WifiManager:毋庸置疑,就是无限管理相关的,类似获得wifi链接名字,判断是否链接,开关等一些和无线相关

Java代码   收藏代码
  1. WifiManager manager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);  

    获得wifimanager后调用

Java代码   收藏代码
  1. WifiInfo info = manager.getConnectionInfo();  

    wifiinfo里面包含很多东西,无限的IP,名字,ISSID,物理地址等很多信息,这里我需要获得查看是否链接实验室的无线获得无线的名字,名字是SSID。

Java代码   收藏代码
  1. String ssId = info.getSSID();  

    还有控制wifi开关

Java代码   收藏代码
  1. manager.setWifiEnabled(true);//打开wifi  
  2. manager.setWifiEnabled(false);// 关闭wifi<span style="font-family: 'Microsoft YaHei', 微软雅黑, SimHei, tahoma, arial, helvetica, sans-serif;">  </span>  

    获得相关权限有:

Java代码   收藏代码
  1. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  2. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  

 



4、ConnectivityManager:主要管理网络连接相关操作, 

 

Java代码   收藏代码
  1. ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
Java代码   收藏代码
  1. NetWorkInfo netinfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)  

   NetWorkInfo里面就包括网络连接的信息,包括连接状态,网络是否可用等相关操作

  

Java代码   收藏代码
  1. int code = netinfo.getState();  
  2. if (wifiState == State.CONNECTED || wifiState == State.CONNECTING)            
  3.       return 200;// 连接成功      
  4. else          
  5.       return 500// 连接失败  

    获得权限:

Java代码   收藏代码
  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  

 



5、ActivityManager:是与系统中所有运行着的Activity交互提供了接口,主要的接口围绕着运行中的进程信息,任务信息,服务信息等。

Java代码   收藏代码
  1. ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);  

     通过activityManager可以获得很多相关信息:通过名字就可以看出相关信息

Java代码   收藏代码
  1. MemoryInfo mi = new MemoryInfo();  
  2. am.getMemoryInfo(mi);  
  3. am.getRunningAppProcesses();  
  4. am.getRunningServices();  
  5. am.getDeviceConfigurationInfo();  
  6. am.killBackgroundProcessed(PackageName);  
  7. am.restartPackage(PackageName);  

 





6、TelephonyManager主要是设计到和手机相关的操作,获得手机一些相关信息,硬件信息,产地等很多信息

 

Java代码   收藏代码
  1. TelephonyManager telephone = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);  
  2. String imei = telephone.getDeviceId();  
  3. String model = Build.MODEL;  
  4.    String manufactrer = Build.MANUFACTURER;  
  5.    String id = Build.ID;  

 

 

7、AudioManager 就是我们定义的控制系统声音的对象。


AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);


通过AudioManager可以设置系统的声音。

Java代码   收藏代码
  1. //获取声音的最大值
  2. mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
  3. //得到当前的声音大小
  4. mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
  5. //调节声音的大小(类型,调节方向(可以是数值大小),调节时的功能)
  6. mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, 0);
  7. //设置是否静音(类型,是否静音)
  8. mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);

 


8、WindowsManagerAndroid的窗口机制是基于一个叫做 WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以前的Activity或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个 WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了。 



Java代码   收藏代码
  1. WindowManager mWm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);   
  2. Button view = new Button(this);   
  3. view.setText("window manager test!");   
  4. WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();   
  5. mWm.addView(view, mParams);   

<span style="white-space:pre">		</span>// 得到屏幕尺寸
		DisplayMetrics metrics = new DisplayMetrics();		
		getWindowManager().getDefaultDisplay().getMetrics(metrics);		
		int screenW = metrics.widthPixels;
		int screenH = metrics.heightPixels;



9、PackageManager

本类API是对所有基于加载信息的数据结构的封装,包括以下功能:

安装,卸载应用查询permission相关信息

查询Application相关信息(application,activity,receiver,service,provider及相应属性等)

查询已安装应用

增加,删除permission

清除用户数据、缓存,代码段等


<span style="white-space:pre">		</span>
		PackageManager packageManager = context.getPackageManager();

		// 获取安装的信息
		ArrayList<PackageInfo> packageInfos = (ArrayList<PackageInfo>) packageManager
				.getInstalledPackages(PackageManager.GET_ACTIVITIES);
		// | PackageManager.GET_UNINSTALLED_PACKAGES 只要安装过即使卸载,只要数据还在,就可以显示
		mSysAppInfo = new ArrayList<AppInfoMode>();//系统程序
		mUserAppInfo = new ArrayList<AppInfoMode>();//用户程序

		for (int i = 0; i < packageInfos.size(); i++) {
			if (((packageInfos.get(i).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)
					|| ((packageInfos.get(i).applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0)) {
				mSysAppInfo.add(addAppInfo(packageManager, packageInfos, i));
			} else {
				mUserAppInfo.add(addAppInfo(packageManager, packageInfos, i));
			}
		}




    简单对这几个类进行了简要说明,后续在应用中再一点设计和表述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值