android 的各种manager
一、getSystemService()
getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。
传入的Name |
返回的对象 |
说明 |
WINDOW_SERVICE |
WindowManager |
管理打开的窗口程序 |
LAYOUT_INFLATER_SERVICE |
LayoutInflater |
取得xml里定义的view |
ACTIVITY_SERVICE |
ActivityManager |
管理应用程序的系统状态 |
POWER_SERVICE |
PowerManger |
电源的服务 |
ALARM_SERVICE |
AlarmManager |
闹钟的服务 |
NOTIFICATION_SERVICE |
NotificationManager |
状态栏的服务 |
KEYGUARD_SERVICE |
KeyguardManager |
键盘锁的服务 |
LOCATION_SERVICE |
LocationManager |
位置的服务,如GPS |
SEARCH_SERVICE |
SearchManager |
搜索的服务 |
VEBRATOR_SERVICE |
Vebrator |
手机震动的服务 |
CONNECTIVITY_SERVICE |
Connectivity |
网络连接的服务 |
WIFI_SERVICE |
WifiManager |
Wi-Fi服务 |
TELEPHONY_SERVICE |
TeleponyManager |
电话服务 |
DOWNLOARD_SERVICE |
DownloardManager |
http下载 |
①
WindowManager:系统
悬浮窗口
WindowManager mWm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
非常重要关键的一个service,它是一个负责统筹管理所有窗口的一个服务,从始到终一直在运作。
我们Android平台是一个又一个的Activity组成的,每一个Activity有一个或者多个View构成。所以说,当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操作在Activity里面实现,或者是一个Dialog或者Toast。这种方式固然简单,但是在有些情况下,我们要求的只是简单的显示,用Activity显然是多余,这个时候,我们如何处理呢?
整个Android的窗口机制是基于一个叫做 WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以前的Activity或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个 WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了。
②
LayoutManager
③
ActivityManager:与系统中正在运行的所有活动进行交互。
获取ActivityManager对象的方法是在拥有context的环境下使用下面的方法。
ActivityManager activityManager= (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ActivityManager常用的方法:
-
getRunningAppProcesses()
:获取系统中正在运行的所有的进程的信息。
-
getRunningServices
:获取系统中正在运行的所有的服务的信息。
-
getMemoryInfo()
:获取系统内存信息。
-
getProcessMemoryInfo
:获取某个或某几个进程占用的内存信息。
-
getDeviceConfigurationInfo()
:获取设备的配置属性。
④
PowerManager:用来控制电源状态
/**开启 保持屏幕唤醒*/
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "PowerManagerWakeLock");
wakeLock.acquire();
if (wakeLock != null) {
wakeLock.release();
wakeLock = null;
}
⑤
AlarmManager
:提供系统报警服务的访问
获取AlarmManager对象的方法是在拥有context的环境下使用下面的方法。
AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
AlarmManager常用方法:
setTime(long millis):设置系统时钟时间。
setTimeZone(String timeZone):设置系统时钟时区。
setAlarmClock(AlarmClockInfo info, PendingIntent operation):设置一个警报来代表闹钟。
set(int type, long triggerAtMillis, PendingIntent operation):设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。
setRepeating(int type, long triggerAtMillis,long intervalMillis, PendingIntent operation):设置重复闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第三个参数表示闹钟响应动作。
setInexactRepeating(int type, long triggerAtMillis,long intervalMillis, PendingIntent operation):设置重复闹钟,与setRepeating方法类似,区别是setRepeating闹钟两次执行的间隔时间固定,而setInexactRepeating闹钟两次执行的间隔时间不固定。
上述方法中的type参数有五种值:
AlarmManager.ELAPSED_REALTIME:表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始)。
AlarmManager.ELAPSED_REALTIME_WAKEUP:表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间。
AlarmManager.RTC:表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间。
AlarmManager.RTC_WAKEUP:表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间。
AlarmManager.POWER_OFF_WAKEUP:表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间。
⑥
NotificationManager:通知用户发生的事件
NotificationManager的基本使用方法:
NotificationManager notificationManager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
PendingIntent intent=PendingIntent.getActivity(this,0,new Intent(MainActivity.this,MainActivity.class),0);
Notification notification=new NotificationCompat.Builder(this)
.setTicker("有新通知了")
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("通知标题")
.setContentText("通知内容")
.setWhen(0)
.setContentIntent(intent)
.build();
notificationManager.notify(0,notification);
⑦
KeyguardManager:对锁屏进行管理
一个用于锁屏和解锁的类,通过调用Context.getSystemService(Context.KEYGUARD_SERVICE)来获取实例。实际上用于操控锁屏的是KeyguardManager.KeyguardLock类。
事实上,
KeyguardManager 有两个重要的内部类,
两个内部类分别是:
(1)KeyguardManager.KeyguardLock(两个函数)
记得加权限
disableKeyguard()函数来解除锁屏
reenableKeyguard()反解除锁屏.
reenableKeyguard()反解除锁屏的意思是:如果在调用disableKeyguard()函数之前是锁屏的,那么就进行锁屏,否则不进行任何操作。当然如果之前没调用disableKeyguard()函数,也不进行任何操作。
(2)KeyguardManager.OnKeyguardExitResult(boolean success) :返回true表示exitKeyguardSecurely()函数执行成功,否则表示失败。
⑧
LocationManager
:提供了系统位置服务的访问
获取LocationManager对象的方法是在拥有context的环境下使用下面的方法。
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
LocationManager常用方法:
getAllProviders():获取所有能提供位置服务的Provider
getLastKnownLocation():获取上次开启位置服务记录的位置
requestLocationUpdates():注册位置更新的监听者
⑨
SearchManager
⑩
VibratorManager
⑪
ConnectivityManager:关于网络连接状态的查询的类
ConnectivityManager的主要作用是:
监视网络连接(Wi-Fi、GPRS、UMTS、等)
当网络连通性的变化发送广播意图
当连接的网络丢失,会自动连接别的网络
提供一个允许应用程序查询可用网络的粗粒度或细粒度的应用程序接口
提供一个允许应用程序请求和选择网络的应用程序的接口
ConnectivityManager的基本使用方法:
/**
* 检测当的网络(WLAN、3G/2G)状态
* @param context Context
* @return true 表示至少有一种网络处于连接状态
*/
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info != null && info.isConnected())
{
// 当前网络是连接的
if (info.getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
}
return false;
}
⑫
WifiManager
⑬
TelephonyManager:提供访问设备上的电话服务的信息
获取TelephonyManager对象的方法是在拥有context的环境下使用下面的方法。
TelephonyManager telephonyManager= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
TelephonyManager常用方法:
getCallState():返回电话状态。
TelephonyManager.CALL_STATE_IDLE 无任何状态时
TelephonyManager.CALL_STATE_OFFHOOK 接起电话时
TelephonyManager.CALL_STATE_RINGING 电话进来时
getCellLocation():获取当前电话的位置
getDataActivity():获取数据活动状态
TelephonyManager.DATA_ACTIVITY_IN 活动,正在接受数据
TelephonyManager.DATA_ACTIVITY_OUT 活动,正在发送数据
TelephonyManager.DATA_ACTIVITY_INOUT 活动,正在接受和发送数据
TelephonyManager.DATA_ACTIVITY_NONE 活动,但无数据发送和接受
getDeviceId():返回设备id(当前移动终端的唯一标识)
getLine1Number():返回手机号码
⑭
DownloadManager
:下载管理器是一个系统服务,处理长时间运行的HTTP下载
DownloadManager的基本使用方法:
/**
* DownloadManager的基本使用
*/
public void downloadManager(){
//获取系统服务的DownloadManager
downloadManager= (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
//创建一个DownloadManager的请求
DownloadManager.Request request=new DownloadManager.Request(Uri.parse("http://i.imgur.com/iXgyWbG.png"));
//设置请求允许的联网方式:移动网络与wifi都可以
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE| DownloadManager.Request.NETWORK_WIFI);
//禁止发出通知,既后台下载
//request.setShowRunningNotification(false);该方法被setNotificationVisibility取代了
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);
//显示下载界面
request.setVisibleInDownloadsUi(true);
//设置下载后文件存放的位置,存放在/sdcard/Android/data/<包名>/files/Pictures目录下面
request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_PICTURES, "iXgyWbG.png");
//将下载请求放入队列
downloadManager.enqueue(request);
}
⑮
StorageManager:
StorageManager manager = (StorageManager) ctx.getSystemService(Context.STORAGE_SERVICE);
try {
return (String[]) getVolumePaths.invoke(manager);
} catch (Exception e) {
Timber.d(e, "getVolumePaths failed");
}
⑯
DevicePolicyManager :
DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
if (dpm.isAdminActive(new ComponentName(context, MyAdmin.class))) {
dpm.resetPassword("321", 0);
dpm.lockNow();
}
⑰
InputMethodManager:
InputMethodManager inputMethodManager = ( InputMethodManager ) getSystemService ( Context.INPUT_METHOD_SERVICE );
if ( inputMethodManager != null ) {
inputMethodManager.toggleSoftInput ( InputMethodManager.SHOW_FORCED , 0 );
}
⑱
ClipboardManager:
ClipboardManager myClipboard;
myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
ClipData myClip;
String text = "hello world";
myClip = ClipData.newPlainText("text", text);
myClipboard.setPrimaryClip(myClip);
19
StorageManager:
StorageManager
mStorageManager = (StorageManager) context
.getSystemService(Activity.STORAGE_SERVICE);
mMethodGetPaths = mStorageManager.getClass().getMethod(
"getVolumePaths");
paths = (String[]) mMethodGetPaths.invoke(mStorageManager);
二、getSupportFragmentManager()
FragmentManager:在Activity中与Fragment进行交互的接口
获取FragmentManager对象的方法是在Activity中使用下面的方法。
FragmentManager fragmentManager=getSupportFragmentManager();
AlarmManager常用方法:
-
getFragments()
:获取FragmentManager中所有的Fragment。
-
findFragmentById()
:通过id找到对应的Fragment。
-
beginTransaction()
:开启FragmentManager的事务。
FragmentManager只能直接对Fragment进行查询操作,不能直接进行增加,删除,更新操作,要进行这些操作必须在FragmentManager开启的事务中进行。开启的事务的任务都完成后要提交事务。
fragmentManager.beginTransaction().replace(R.id.fragment,fragment).commit();
三、getPackageManager()
PackageManager:检索当前安装在设备上的应用程序包相关的各种信息
获取PackageManager对象的方法是在在拥有context的环境下使用下面的方法。
PackageManager packageManager=getPackageManager();
PackageManager常用的方法:
-
getInstalledApplications()
:返回在设备上安装的所有应用程序包的列表。
-
getInstalledPackages()
:返回在设备上安装的所有包的列表。
-
getActivityInfo()
:获取对应组件名的Activity的信息。
注意其实PackageManager是一个抽象类。
四、
getWindowManager()
WindowManager:应用程序使用的界面和窗口管理器
WindowManager是一个接口,基本使用方法如下:
WindowManager windowManager=getWindowManager();
//向windowManager中添加视图
windowManager.addView(view);
//删除windowManager中的视图
windowManager.removeView(view);
五、getDefault()
SmsManager:
发送短信
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo, null, message, null, null);