1,android的style:
2,使用系统图标资源:
3,在activity切换的时候出现动画效果
4,手机定位
5 DevicePolicyManager 系统的服务
6,广播接受者:
1,android的style:
为了统一样式,通常我们采用style来实现,首先在res/values/新建一个styles.xml文件.如:
<style name="title_text_style">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textSize">30sp</item>
<item name="android:textColor">#ff66ff00</item>
<item name="android:paddingTop">10px</item>
<item name="android:paddingLeft">5px</item>
</style>
并且style是可以继承的,如
<style name="button_pre_style" parent="@style/button_next_style">
<item name="android:text">上一步</item>
<item name="android:drawableRight">@drawable/blank</item>
<item name="android:drawableLeft">@drawable/previous</item>
<item name="android:layout_alignParentRight">false</item>
<item name="android:layout_alignParentLeft">true</item>
</style>
2,使用系统图标资源:
我们可以解压android.jar发现下面有很多的资源文件(如系统的image和动画),有的是可以用的,而有点是受保护的.
<item name="android:src">@android:drawable/presence_online</item>
3,在activity切换的时候出现动画效果
// activity切换的动画效果
//param1表示第二个activity进入的效果
//param2表示第一个activity退出的效果
overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
其中上面的动画就是系统的动画资源
4,手机定位
1>wifi定位,200--1000m
2>GPS定位 精度很高 精确度达到2-5m,如果在室内有天花板等物体可能接受不到卫星.
获取gps的服务LocationManager
manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
定义监听器
/**
* 用于从LocationManager接受通知,当位置改变了.
* 这些方法被调用如果LocationListener已经被注册到location manager service通过
* LocationManager.requestLocationUpdates(String, long, float,
* LocationListener)方法
*/
private class MyLocationLinstener implements LocationListener {
// 当位置发生改变的时候 调用的回调
public void onLocationChanged(Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Log.i(TAG, "weizhixinxi :" + latitude + "-" + longitude);
Editor editor = sp.edit();
// 把经纬度存进sharedPreference里面
editor.putString("lastlocation", "weizhixinxi :" + latitude + "-"
+ longitude);
editor.commit();
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
public void onProviderEnabled(String provider) {
}
public void onProviderDisabled(String provider) {
}
}
获取最佳提供者
/**
* 获取手机的最佳位置提供者
*/
public String getProvider() {
// 查询条件的组合 Criteria 类似于map集合
Criteria criteria = new Criteria();
criteria.setAltitudeRequired(false);
criteria.setCostAllowed(true);
criteria.setSpeedRequired(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
return manager.getBestProvider(criteria, true);
}
注册监听
public String getGPSInfo() {
//注册监听,当发生变化的时候会执行监听里面的方法
manager.requestLocationUpdates(getProvider(), 60000, 100,getMyLocationLinstener());
//从sharedpreference里获取数据
String location = sp.getString("lastlocation", "");
return location;
}
5 DevicePolicyManager 系统的服务
2.2以上的系统支持
如果某个程序注册成Admin设备,那么该程序可以执行如下操作:
1>清楚所有数据.也就是回复出厂设置,这回在不提示确定的情况西删除您的所有数据(模拟器不支持)
2>重置密码.强行更新密码,您需要获得管理员提供的新密码才能登录.
3>限制密码选择.限制您使用密码的类型.
4>监控登录尝试.监控对于登录设备和执行某项的操作的失败
5>强行锁定.控制何时锁定设备,这需要您重新输入密码.
并且一旦注册成功,那么就无法通过正常的方式卸载该程序.
可以在 "设置"-->"位置与安全"-->"选择设备管理器"把程序的勾选状态取消,就可以卸载了.
首先把aidl文件复制到src目录下:
注册admin设备
// 注册Admin设备
try {
Method method = Class.forName("android.os.ServiceManager")
.getMethod("getService", String.class);
IBinder binder = (IBinder) method.invoke(null,
new Object[] { Context.DEVICE_POLICY_SERVICE });
IDevicePolicyManager mService = IDevicePolicyManager.Stub
.asInterface(binder);
ComponentName mAdminName = new ComponentName(this, MyAdmin.class);
if (mService != null) {
if (!mService.isAdminActive(mAdminName)) {
Intent intent = new Intent(
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
mAdminName);
startActivity(intent);
}
}
} catch (Exception e) {
e.printStackTrace();
}
定义Receiver
public class MyAdmin extends DeviceAdminReceiver {
}
配置Receiver
<receiver android:name=".receiver.MyAdmin" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
<intent-filter >
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
xml/device_admin:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
</uses-policies>
</device-admin>
运行效果:
6,广播接受者:
首先定义感兴趣的广播,如短信接受广播:
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//具体逻辑代码
}
}
然后注册广播即可
<receiver android:name=".receiver.SmsReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" >
</action>
</intent-filter>
</receiver>