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

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

PackageInfo

getPackageInfo(

String packageName, int flags)

packageName;工程包名;flags:一般为0

List<

ApplicationInfo>

getInstalledApplications(int flags)


获取已经安装的所有App信息对象

List<

PackageInfo>

getInstalledPackages(int flags)


获取已经安装的所有程序的包对象,参数1:一般传入0即可

Intent

getLaunchIntentForPackage(

String packageName)

获取指定包名启动的intent对象



2.PackageInfo抽象类



Fields


public int

versionCode

获取版本号,版本序号

String

versionName

获取版本名,版本全名

ApplicationInfo

applicationInfo

获取包对应的应用信息对象

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)

短信内容超出一条短信的可支持最大内容时,可用该方法对文本进行拆分,然后再发送

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

SmsMessage

createFromPdu(byte[] pdu)


通过字节数组初始化该解析对象,这个字节数组数据一般是存储在Intent中Bundle对象中key值为【pdus】的Object[]数组中的一个值

String

getOriginatingAddress()


获取发送短信方的电话

String

getMessageBody()


获取短信中的文本内容




LocationManager



注意:如果你想开发获取位置的应用,你不要用Google这套API,偏移不说,受太多局限。最好使用第三方的,如百度地图开放平台,查询位置的方式==>1.GPS==>wifi==>3G,定位非常准,误差可能在几米之内。所以做地图或者获取位置可以使用百度或者高德地图的SDK



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

String

process

获取服务所在进程名

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

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

PendingIntent

getActivity(

Context context, int requestCode,  Intent intent, int flags)

创建一个延迟开启界面的意图。参数1:上下文;参数2:请求码;参数3:开启的意图对象;参数4:Widget中通常使用PendingIntent.FLAG_UPDATE_CURRENT

PendingIntent

getBroadcast(

Context context, int requestCode,  Intent intent, int flags)

创建一个延迟发送广播的意图。参数值与延迟Activity类似

PendingIntent

getService(

Context context, int requestCode,  Intent intent, int flags)

创建一个延迟开启服务的意图。参数值与延迟Activity类似