系统服务和Manager"/>
Android开发——系统服务和Manager
TelephonyManager
描述:访问电话服务的一些信息,可以监听电话的状态。不能实例化这个类,通过系统的服务实例化这个对象——getSystemService(TELEPHONY_SERVICE)
1.TelephonyManager类
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | CALL_STATE_IDLE | 电话的空闲状态,没有任何来电时,可以用来做挂断电话的状态 | |||||||||
int | CALL_STATE_OFFHOOK | 电话接通状态 | |||||||||
int | CALL_STATE_RINGING | 电话响铃状态 |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
String | getSimSerialNumber() 获取sim卡的序列号。 关于获取sim卡信心的方法都定义在这个类里面,需要时可以来看一下 | ||||||||||
int | getCallState() 获取电话的状态 | ||||||||||
void | listen( PhoneStateListener listener, int events) 对来电注册一个监听器,监听来电的事件,event:是电话监听器监听的具体哪个事件 |
2.PhoneStateListener类
注:录音时需要创建MediaRecorder对象,录音的所有逻辑实现都在这个对象的帮助描述中,使用时复制即可Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | LISTEN_CALL_STATE | 电话的接听状态,对应Telephony中的listen方法中的event事件值 |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void | onCallStateChanged(int state, String incomingNumber) 当电话状态改变时调用 |
WindowManager
1.WindowMannger接口
获取:窗口管理器,通过系统服务实例化该对象———getSystemService(WINDOW_SERVICE)
窗口:手机整个屏幕就是一个窗口,我们可以在窗口中展示各种各样的界面,Activity是依附于窗口而存在的。
知识点:此类是ViewManager接口的实现类,各种布局各种父控件都实现了这个接口。通过这个接口才具备了addView(view,params)方法,只要实现了这个接口,这个类必然有一个LayoutParams内部类
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
abstract Display | getDefaultDisplay() 获取默认的显示对象 | ||||||||||
abstract void | addView( View view, ViewGroup.LayoutParams params) 添加一个子view到窗口布局中,窗口在最上层,参数2:表示控件的布局位置 | ||||||||||
abstract void | removeView( View view) 删除其中添加的view | ||||||||||
abstract void | updateViewLayout( View view, ViewGroup.LayoutParams params) 更新窗口控件的布局,并且更新后不会超出窗口范围。参数2:已经更新的布局参数 |
2.Display终类
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | getHeight() 获取屏幕高,已过时 | ||||||||||
int | getWidth() 获取屏幕宽,已过时 | ||||||||||
void | getSize( Point outSize) 获取屏幕尺寸,并且把屏幕尺寸封装到Point对象中,以后通过Point对象的成员变量x和y |
PackageManager
1.PackageManager类
说明:一般通过Context对象的getPackageManager()方法获取该对象
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
abstract PackageInfo | getPackageInfo( String packageName, int flags) 获取包信息对象, packageName;工程包名;flags:一般为0 | ||||||||||
abstract List< ApplicationInfo> | getInstalledApplications(int flags) 获取已经安装的所有App信息对象 | ||||||||||
abstract List< PackageInfo> | getInstalledPackages(int flags) 获取已经安装的所有程序的包对象,参数1:一般传入0即可 | ||||||||||
abstract Intent | getLaunchIntentForPackage( String packageName) 获取指定包名启动的intent对象 |
2.PackageInfo抽象类
Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
public int | versionCode | 获取版本号,版本序号 | |||||||||
public String | versionName | 获取版本名,版本全名 | |||||||||
public ApplicationInfo | applicationInfo | 获取包对应的应用信息对象 | |||||||||
public String | packageName | 获取包名 |
3.ApplicationInfo类
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | FLAG_SYSTEM | 标识系统应用的特殊标记 | |||||||||
int | FLAG_EXTERNAL_STORAGE | 安装在外部存储卡应用的特殊标记 | |||||||||
public int | flags | 每一个应用的标记,这里的标记表示一个状态机,与特定的标识相与还是这个特定的标识,就说明此应用具有这个特定标识所表示的特性 |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Drawable | loadIcon( PackageManager pm) 获取应用的图标对象 | ||||||||||
CharSequence | loadLabel( PackageManager pm) 获取应用的标签对象 | ||||||||||
Drawable | loadLogo( PackageManager pm) 获取应用的Logo |
SmsManager
1.SmsManager终类
注:短信管理器,通过getDefault()方法对该对象进行初始化
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
ArrayList< String> | divideMessage( String text) 短信内容超出一条短信的可支持最大内容时,可用该方法对文本进行拆分,然后再发送 | ||||||||||
static SmsManager | getDefault() 初始化该对象 | ||||||||||
void | sendTextMessage( String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) 发送一个文本短信;参数1:发送的地址电话号码;参数2:短信服务中心的地址,null表示默认服务中心;参数3:短信内容;参数4:发送成功后做什么;参数5:接受成功后干什么 |
2.SmsMessage类
注意:这个类和SmsManager没关系,不要弄混,主要是用来解析短信的
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
static SmsMessage | createFromPdu(byte[] pdu) 通过字节数组初始化该解析对象,这个字节数组数据一般是存储在Intent中Bundle对象中key值为【pdus】的Object[]数组中的一个值 | ||||||||||
String | getOriginatingAddress() 获取发送短信方的电话 | ||||||||||
String | getMessageBody() 获取短信中的文本内容 |
LocationManager
注意:如果你想开发获取位置的应用,你不要用Google这套API,偏移不说,受太多局限。最好使用第三方的,如百度地图开放平台,查询位置的方式==>1.GPS==>wifi==>3G,定位非常准,误差可能在几米之内。所以做地图或者获取位置可以使用百度或者高德地图的SDK1.定位相关知识
(1)网络定位:IP地址和实际地址对应起来,形成一个数据库,通过IP值查询其相应的地址。缺陷:IP地址动态分配,导致定位不准确
(2)基站定位:三个基站通过一些无线电波等相关东西确定你当前所在的位置,一个基站只能确定你所在的圆形范围。缺陷:定位精度不高,在几百米到几公里不等
(3)GPS定位:美国全球卫星定位系统,至少需要3颗卫星来定位,实际上有24颗卫星,覆盖了全球90%区域,不需要联网。好处:精度比较高,几米到几十米不等。缺点:容易受云层、建筑、大树等影响,会挡住卫星的信号
(4)A-GPS定位:服务GPS定位系统,通过网络和GPS联合定位。Andoird手机采取的定位方式
2.LocationManager类
注:通过系统服务对该对象进行初始化。getSystemService(LOCATION_SERVICE)
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
String | GPS_PROVIDER | GSP定位提供者 | |||||||||
String | NETWORK_PROVIDER | 网络定位提供者 | |||||||||
String | PASSIVE_PROVIDER | 被动定位提供者 |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
List< String> | getAllProviders() 获取手机全部位置提供者。network:网络定位提供者;gps:GPS定位提供者;passive:被动的定位,获取其他应用已定位完成的数据 | ||||||||||
String | getBestProvider( Criteria criteria, boolean enabledOnly) 获取一个当时最好的位置提供者,参数1:传入一个挑选的标准;参数2:true——只返回能用的 | ||||||||||
void | requestLocationUpdates( String provider, long minTime, float minDistance, LocationListener listener) 请求位置定位,参数1:定位方式提供者;参数2:最短更新时间;参数3:最短定位距离;参数4:位置监听器 |
3.LocationListener接口
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
abstract void | onLocationChanged( Location location) 位置已发生变化就调用 | ||||||||||
abstract void | onProviderDisabled( String provider) 用户关闭GSP开关 | ||||||||||
abstract void | onProviderEnabled( String provider) 用户打开GPS开关 | ||||||||||
abstract void | onStatusChanged( String provider, int status, Bundle extras) 位置提供者状态发生变化时调用,位置提供者由能用变成不能用时调用。一般GSP都可以,当你进入电梯时GPS定位不能用了 |
4.Location类
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
double | getLatitude() 获取维度 | ||||||||||
double | getLongitude() 获取经度 | ||||||||||
float | getAccuracy() 获取精确度,一般是50M以内 | ||||||||||
double | getAltitude() 获取海拔 |
5.火星坐标相关
解释:对真实坐标进行算法的加偏处理,没人能看懂。中国国内的地图和GPS系统都进行了火星加偏处理,成为了火星地图,只有国内能用
工具:火星坐标转换工具,找出算法的规律,使用数据库能够对火星坐标与原始坐标间的相互转换。通过关键的建筑物,让后通过算法结合火星所标算出你的真实坐标DevicePolicyManager
1.使用该类的步骤
(1)首先建立一个DeviceAdminReceiver的子类广播接收者类,不用定义内容
(2)注册广播接受者
<receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver"------------需要替换为我们自己的广播接受者对象android:label="@string/sample_device_admin"-----------系统管理员的名字android:description="@string/sample_device_admin_description"------------系统管理员的文字描述android:permission="android.permission.BIND_DEVICE_ADMIN"><meta-data android:name="android.app.device_admin"android:resource="@xml/device_admin_sample" />-------------需要在res目录下建立一个xml目录,在此目录下创建这里指定的xml文件即可<intent-filter><action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /></intent-filter>
</receiver>
(3)创建res/xml目录,创建给予广播接收者权限
<device-admin xmlns:android=""><uses-policies>-----------表示我这个系统管理员定以后能获得哪些权限<limit-password />------------限制密码<watch-login />-----------检测登陆<reset-password />------------重置密码<force-lock />-----------强制锁屏<wipe-data />-----------清除数据<expire-password /><encrypted-storage /><disable-camera /></uses-policies>
</device-admin>
2.DevicePolicyManager类
注:策略管理器,通过系统服务实例化该对象——getSystemService(DEVICE_POLICY_SERVICE)
特殊:<1>.调用该对象的方法大多需要管理员权限,开启管理员权限的步骤:(前提需要配置上边的广播接收者)【手机设置】==>【安全】==>【设备管理器】,这时你即可看见我们配置的系统管理员的广播接受者,勾选其即可
<2>.我们如果要使用该对象的方法,必须帮助用户来激活管理员权限,所以我们需要使用隐式意图跳转到该应用的激活管理员权限界面
//初始化管理员部件
ComponentName mDeviceAdminSample = new ComponentName(this,我们自定义的系统管理员广播接受者字节码文件对象)
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);//该界面的Action值
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,mActivity.getString(R.string.add_admin_extra_app_text));
startActivityForResult(intent);
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void | lockNow() 系统立即锁屏 | ||||||||||
boolean | isAdminActive( ComponentName who) 本应用的系统管理员权限是否激活 | ||||||||||
void | removeActiveAdmin( ComponentName who) 移除该应用的系统管理员权限 | ||||||||||
boolean | resetPassword( String password, int flags) 屏幕锁屏后重置密码,对系统设置一个新密码,不管过去有无密码。清除密码可以使用这个方法传入一个空字符串。参数1:设置的密码;参数2:默认可以为0,其他值表示其他管理员权限可否修改密码。 | ||||||||||
void | wipeData(int flags) 清除数据,参数1:0指的是内部存储器,DevicePolicyManager.WIPE_EXTERNAL_STORAGE指的是连同SD卡数据也同样清空 |
ActivityManager
1.ActivityManager类
特:杀死自己线程的方法
<1>.System.exit(int code);参数:传入0或者1
<2>.android.os.Process.killProcess(android.os.Process.myPid());杀死自己所在线程
注:通过系统的服务实例化该对象-----------getSystemService(ACTIVITY_SERVICE)
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
List< ActivityManager.RunningServiceInfo> | getRunningServices(int maxNum) 获取系统当前运行的所有服务,参数1:获取的服务最大数 | ||||||||||
List< ActivityManager.RunningAppProcessInfo> | getRunningAppProcesses() 获取当前运行的所有App进程 | ||||||||||
void | getMemoryInfo( ActivityManager.MemoryInfo outInfo) 该方法不是获取值,而是给参数MemoryInfo对象赋值,这个内存信息对象存储的是系统的总内存信息 | ||||||||||
MemoryInfo[] | getProcessMemoryInfo(int[] pids) 获取指定线程的内存信息对象,返回的对象类型是Debug.MemoryInfo。参数1:特定线程的pids | ||||||||||
void | killBackgroundProcesses( String packageName) 杀死后台执行的指定线程。杀死其它某一个线程 | ||||||||||
List< ActivityManager.RunningTaskInfo> | getRunningTasks(int maxNum) 获取正在运行的所有应用的任务栈,参数1:获取多少个任务,从任务栈最上边开始计算 |
2.ActivityManager.RunningServiceInfo静态类
Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
public int | pid | 获取服务对应的pid | |||||||||
public String | process | 获取服务所在进程名 | |||||||||
public ComponentName | service | 封装了一个服务对象,该对象中包含此服务所有属性信息,包括服务对应的服务class文件名 | |||||||||
public int | uid | 获取服务对应的uid |
3.ComponentName终类
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
ComponentName( Context pkg, Class<?> cls) 通过上下文包和字节码类初始化 |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
String | getClassName() 获取字节码文件的类名 | ||||||||||
String | getPackageName() 获取包名 |
4.Debug.MemoryInfo静态类
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
nt | getTotalPrivateDirty() 获取应用独占的内存大小 | ||||||||||
int | getTotalSharedDirty() 获取应用占得Linux共享的内存空间大小 |
5.ActivityManager.MemoryInfo静态类
注:进入系统根目录【proc】(此目录中都是系统各种配置文件)==>【meminfo】这个文件有各种系统的存储信息,内存信息以改变,系统就会自动更新该文件
Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
public long | availMem | 系统可用内存 | |||||||||
public long | totalMem | 系统总内存,这是API 16的方法,低版本不能使用该方法 |
6.ActivityManager.RunningAppProcessInfo静态类
Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
public String | processName | 获取线程的包名 | |||||||||
public int | pid | 获取进程id,pid==>process id |
AppWidgetManager
注:窗口小部件widget管理者,实例化该对象通过——————AppWidgetManager.getInstance(context);
1.创建Widget步骤
(1)自定义一个广播接受者,继承AppWidgetProvider
(2)注册这个widget提供者,注册代码如下
<receiver android:name="自定义widget提供者全类名" ><intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /></intent-filter><meta-data android:name="android.appwidget.provider"android:resource="@xml/example_appwidget_info" />--------我们自定义的widget提供者的配置文件
</receiver>
(3)创建一个Xml的配置文件,在【res】目录下创建【xml】目录,自定义【example_appwidget_info.xml】
<appwidget-provider xmlns:android=""android:minWidth="40dp"---------最小宽度android:minHeight="40dp"----------最小高度android:updatePeriodMillis="86400000"-----------更新时间间隔,单位毫秒,最短更新时间间隔是30分钟android:previewImage="@drawable/preview"-----------预览图片,就是我们查看窗口小部件时显示的图片。默认设应用图标android:initialLayout="@layout/example_appwidget"------------初始化的布局文件android:configure="com.example.android.ExampleAppWidgetConfigure" -------------配置页面,因为某些widget拖到桌面时需要配置选择一些东西,根据用户选择的结果初始化widget的数据android:resizeMode="horizontal|vertical"------------可变的大小,水平和垂直方向的拉伸android:widgetCategory="home_screen|keyguard"------------widget的类型:展现在主页和锁屏页面(4.2+支持,两个都能显示)android:initialKeyguardLayout="@layout/example_keyguard"------------锁屏页面要展现的布局文件(4.2+支持)>
</appwidget-provider>
(4)创建相关需要的布局文件,类如initialLayout、configure或者initialKeyguardLayout的
2.AppWidgetProvider类
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void | onEnabled( Context context) 当widget第一次添加到桌面时被调用,一个桌面可以添加多个Widget | ||||||||||
void | onUpdate( Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) 新增widget时,或者更新时被调用(就是每次经过配置文件设置的最小更新间隔时间时) | ||||||||||
void | onDeleted( Context context, int[] appWidgetIds) widget被删除时被调用 | ||||||||||
void | onDisabled( Context context) 最后一个widget从桌面移除时被调用 | ||||||||||
void | onAppWidgetOptionsChanged( Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) widget设置参数发生变化,比如大小调整之后调用,一个widget被创建,从无到有就会调用这个方法 | ||||||||||
void | onReceive( Context context, Intent intent) 每次在上边5个方法被调用之后绝对会调用onReceive()方法 |
3.AppWidgetManager类
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void | updateAppWidget( ComponentName provider, RemoteViews views) 通过两个参数更新widget |
上边方法使用事例代码:
//参数1:上下文包;参数2:表示我们自定义的widget的AppWidgetProvider字节码文件对象
ComponentName provider = new ComponentName(this, MyWidget.class);//初始化远程view对象。参数1:自己应用的包名;参数2:widget布局的id
RemoteViews views = new RemoteViews(this.getPackageName(), R.layout.widget_process);// 通知桌面更新widget
AppWidgetManager mAWM = AppWidgetManager.getInstance(this);
mAWM.updateAppWidget(provider, views);//把views改变后数据传递给Launcher2中的widget
//所以我们想要改变Widget,只要改变这个RemoteView对象即可
4.RemoteViews类
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void | setTextViewText(int viewId, CharSequence text) 修改一个TextView控件文字为指定文字。参数1:TextView控件id;参数2:文本数据 | ||||||||||
void | setOnClickPendingIntent(int viewId, PendingIntent pendingIntent) 设置点击view后跳转的界面。参数1:点击的view控件。参数2:跳转界面的延迟意图对象 |
5.PendingIntent终类
解释:延时意图,我们不知道什么时候该意图会被触发,不过我们可以定义触发该意图后执行的逻辑
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
static PendingIntent | getActivity( Context context, int requestCode, Intent intent, int flags) 创建一个延迟开启界面的意图。参数1:上下文;参数2:请求码;参数3:开启的意图对象;参数4:Widget中通常使用PendingIntent.FLAG_UPDATE_CURRENT | ||||||||||
static PendingIntent | getBroadcast( Context context, int requestCode, Intent intent, int flags) 创建一个延迟发送广播的意图。参数值与延迟Activity类似 | ||||||||||
static PendingIntent | getService( Context context, int requestCode, Intent intent, int flags) 创建一个延迟开启服务的意图。参数值与延迟Activity类似 |
更多推荐
Android开发——系统服务和Manager
发布评论