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类
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
1.定位相关知识
(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="http://schemas.android.com/apk/res/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】这个文件有各种系统的存储信息,内存信息以改变,系统就会自动更新该文件
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="http://schemas.android.com/apk/res/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类似
|