安卓开发中的各种Manager
KeeChristen
8年前
<p style="text-align:center"><img src="https://simg.open-open.com/show/61a8c74cfb4a78822cd812c72cd4b4a2.png"></p> <p style="text-align:center">kaQwwSg.png</p> <h3><strong>1. ActivityManager:与系统中正在运行的所有活动进行交互。</strong></h3> <p>获取ActivityManager对象的方法是在拥有context的环境下使用下面的方法: ActivityManager activityManager= (ActivityManager) getSystemService(ACTIVITY_SERVICE);</p> <p>ActivityManager常用的方法:</p> <p>getRunningAppProcesses()</p> <p>:获取系统中正在运行的所有的进程的信息。</p> <p>getRunningServices</p> <p>:获取系统中正在运行的所有的服务的信息。</p> <p>getMemoryInfo()</p> <p>:获取系统内存信息。</p> <p>getProcessMemoryInfo</p> <p>:获取某个或某几个进程占用的内存信息。</p> <p>getDeviceConfigurationInfo()</p> <p>:获取设备的配置属性。</p> <h3><strong>2. FragmentManager:在Activity中与Fragment进行交互的接口</strong></h3> <p>获取FragmentManager对象的方法是在Activity中使用下面的方法: FragmentManager fragmentManager=getSupportFragmentManager();</p> <p>AlarmManager常用方法:</p> <p>getFragments()</p> <p>:获取FragmentManager中所有的Fragment。</p> <p>findFragmentById()</p> <p>:通过id找到对应的Fragment。</p> <p>beginTransaction()</p> <p>:开启FragmentManager的事务。</p> <p>FragmentManager只能直接对Fragment进行查询操作,不能直接进行增加,删除,更新操作,要进行这些操作必须在FragmentManager开启的事务中进行。开启的事务的任务都完成后要提交事务。</p> <p>fragmentManager.beginTransaction().replace(R.id.fragment,fragment).commit();</p> <h3><strong>3. PackageManager:检索当前安装在设备上的应用程序包相关的各种信息</strong></h3> <p>获取PackageManager对象的方法是在在拥有context的环境下使用下面的方法: PackageManager packageManager=getPackageManager();</p> <p>PackageManager常用的方法:</p> <p>getInstalledApplications()</p> <p>:返回在设备上安装的所有应用程序包的列表。</p> <p>getInstalledPackages()</p> <p>:返回在设备上安装的所有包的列表。</p> <p>getActivityInfo()</p> <p>:获取对应组件名的Activity的信息。</p> <p>注意其实PackageManager是一个抽象类。</p> <h3><strong>4. DownloadManager:下载管理器是一个系统服务,处理长时间运行的HTTP下载</strong></h3> <p>DownloadManager的基本使用方法:</p> <pre> <code class="language-java">/ * 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); }</code></pre> <h3><strong>5. ConnectivityManager:关于网络连接状态的查询的类</strong></h3> <p>ConnectivityManager的主要作用是:</p> <p>监视网络连接(Wi-Fi、GPRS、UMTS、等)</p> <p>当网络连通性的变化发送广播意图</p> <p>当连接的网络丢失,会自动连接别的网络</p> <p>提供一个允许应用程序查询可用网络的粗粒度或细粒度的应用程序接口</p> <p>提供一个允许应用程序请求和选择网络的应用程序的接口</p> <p>ConnectivityManager的基本使用方法:</p> <pre> <code class="language-java">/ * 检测当的网络(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; }</code></pre> <h3><strong>6. WindowManager:应用程序使用的界面和窗口管理器</strong></h3> <p>WindowManager是一个接口,基本使用方法如下:</p> <p>WindowManager windowManager=getWindowManager(); //向windowManager中添加视图 windowManager.addView(view); //删除windowManager中的视图 windowManager.removeView(view);</p> <h3><strong>7. NotificationManager:通知用户发生的事件</strong></h3> <p>NotificationManager的基本使用方法:</p> <pre> <code class="language-java">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);</code></pre> <h3><strong>8. TelephonyManager:提供访问设备上的电话服务的信息</strong></h3> <p>获取TelephonyManager对象的方法是在拥有context的环境下使用下面的方法: TelephonyManager telephonyManager= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);</p> <p>TelephonyManager常用方法:</p> <p>getCallState()</p> <p>:返回电话状态。</p> <p>TelephonyManager.CALL_STATE_IDLE</p> <p>无任何状态时</p> <p>TelephonyManager.CALL_STATE_OFFHOOK</p> <p>接起电话时</p> <p>TelephonyManager.CALL_STATE_RINGING</p> <p>电话进来时</p> <p>getCellLocation()</p> <p>:获取当前电话的位置</p> <p>getDataActivity()</p> <p>:获取数据活动状态</p> <p>TelephonyManager.DATA_ACTIVITY_IN</p> <p>活动,正在接受数据</p> <p>TelephonyManager.DATA_ACTIVITY_OUT</p> <p>活动,正在发送数据</p> <p>TelephonyManager.DATA_ACTIVITY_INOUT</p> <p>活动,正在接受和发送数据</p> <p>TelephonyManager.DATA_ACTIVITY_NONE</p> <p>活动,但无数据发送和接受</p> <p>getDeviceId()</p> <p>:返回设备id(当前移动终端的唯一标识)</p> <p>getLine1Number()</p> <p>:返回手机号码</p> <h3><strong>9. LocationManager:提供了系统位置服务的访问</strong></h3> <p>获取LocationManager对象的方法是在拥有context的环境下使用下面的方法: LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);</p> <p>LocationManager常用方法:</p> <p>getAllProviders()</p> <p>:获取所有能提供位置服务的Provider</p> <p>getLastKnownLocation()</p> <p>:获取上次开启位置服务记录的位置</p> <p>requestLocationUpdates()</p> <p>:注册位置更新的监听者</p> <h3><strong>10. AlarmManager:提供系统报警服务的访问</strong></h3> <p>获取AlarmManager对象的方法是在拥有context的环境下使用下面的方法: AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);</p> <p>AlarmManager常用方法:</p> <p>setTime(long millis)</p> <p>:设置系统时钟时间。</p> <p>setTimeZone(String timeZone)</p> <p>:设置系统时钟时区。</p> <p>setAlarmClock(AlarmClockInfo info, PendingIntent operation)</p> <p>:设置一个警报来代表闹钟。</p> <p>set(int type, long triggerAtMillis, PendingIntent operation)</p> <p>:设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。</p> <p>setRepeating(int type, long triggerAtMillis,long intervalMillis, PendingIntent operation)</p> <p>:设置重复闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第三个参数表示闹钟响应动作。</p> <p>setInexactRepeating(int type, long triggerAtMillis,long intervalMillis, PendingIntent operation)</p> <p>:设置重复闹钟,与setRepeating</p> <p>方法类似,区别是setRepeating</p> <p>闹钟两次执行的间隔时间固定,而setInexactRepeating</p> <p>闹钟两次执行的间隔时间不固定。</p> <p>上述方法中的type</p> <p>参数有五种值:</p> <p>AlarmManager.ELAPSED_REALTIME</p> <p>:表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始)。</p> <p>AlarmManager.ELAPSED_REALTIME_WAKEUP</p> <p>:表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间。</p> <p>AlarmManager.RTC</p> <p>:表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间。</p> <p>AlarmManager.RTC_WAKEUP</p> <p>:表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间。</p> <p>AlarmManager.POWER_OFF_WAKEUP</p> <p>:表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间。</p> <p> </p> <p>来自:http://www.jianshu.com/p/b900f7398ce3</p> <p> </p>