39_抖动和振动效果_32
1、进入模拟器的APIDemo展示点击输入框振动效果(views/animation/shake);
//shake 动摇;摇动;震动;握手的意思
2、找系统sdk\samples\android-16\ApiDemos 并导入工程,如果有错误就解决;
3、找代码搜索代码
功能--》布局文件---》代码
3、找到抖动代码移植;并演示;
4、介绍插入器(interpolator)
5、看APIDemo里views/animation/interpolators 的各种动画
Accelerate 加速动画 decelerate 减速动画
6、Interpolator类似一个函数,计算动画如何播放;
7、振动的代码(Vibrator);
vibrator.vibrate(2000);//振动两秒钟
//-1不重复,非-1为从pattern的指定下标开始重复
long[] pattern = {100,200,100,200,50,50};
vibrator.vibrate(pattern, 1);
8、振动需要权限;
<uses-permission android:name="android.permission.VIBRATE"/>
40_来电号码归属地的显示_25
引入:1、演示打进电话,说明系统的拨号不能改。2、展示土司;
1、创建后台监听来电服务AddressService 并在功能清单文件注册;
检查是否有权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
2、在AddressService 服务里面注册来电状态(TelephoneManager)
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
3、自定义监听类MyPhoneStateListener
private class MyPhoneStateListener extends PhoneStateListener{
/**
* 当呼叫状态发生改变的时候回调该方法
*/
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_ST ATE_RINGING:
String address = AddressDao.getAddress(incomingNumber);
Toast.makeText(getApplicationContext(), address, 1).show();
break;
default:
break;
}
}
}
取消监听:
tm.listen(listener, PhoneStateListener.LISTEN_NONE);
listener = null;
4、在SettingActivity设置中心里配置设置,当点击开启的时候就启动服务,否则相反。然后演示;
布局文件:
<com.itheima.mobilesafe.ui.SettingItemView
android:id="@+id/siv_show_address"
itheima:title="设置号码归属地显示"
itheima:desc_on="号码归属地显示已经打开"
itheima:desc_off="号码归属地显示已经关闭"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
SettingActivity里的代码:
//设置号码归属地显示
siv_show_address = (SettingItemView) findViewById(R.id.siv_show_address);
showAddressIntent = new Intent(this, AddressService.class);
siv_show_address.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(siv_show_address.isCheck()){
siv_show_address.setCheck(false);
stopService(showAddressIntent);
//sp共享偏好去保存
}else{
startService(showAddressIntent);
siv_show_address.setCheck(true);
}
}
});
5、创建一个类ServiceStatusUtils 里面的方法isServiceRunning()校验检查一个服务是否开启;
/**
* 检验一个服务是否还运行,系统所有的
*/
public static boolean isServiceRunning(Context context,String serviceName){
ActivityManager am= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningServiceInfo> infos = am.getRunningServices(100);
for(RunningServiceInfo info : infos){
String className = info.service.getClassName();
if(className.equals(serviceName)){
return true;
}
}
return false;
}
6、演示效果
41_去电号码归属地的显示_16
1、创建广播接收者OutCallReceiver 并注册;监听电话打出去的广播,需要意图;
<receiver android:name="com.itheima.mobilesafe.receiver.OutCallReceiver">
<intent-filter >
<action android:name="android.intent.action.NEW_OUTGOING_CALL"></action>
</intent-filter>
</receiver>
2、需要监听具体意图和权限;
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
3、具体代码实现
public class OutCallReceiver extends BroadcastReceiver {
private static final String TAG = "OutCallReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, "有电话打出去");
String phone = getResultData();
String address = AddressDao.getAddress(phone);
Toast.makeText(context, address, 0).show();
}
}
4、演示功能:演示勾选的来电去电、 进程杀掉时的来电去电;
5、四大组件 :
activity 、 service 、content provider、
Broadcast Receiver
都需要在功能清单文件注册。
Broadcast Receiver不仅可以在功能清单文件注册还可以用代码注册;
6.移植到AddressService 里和服务生命周期一样。并且演示。
注册在onCreate():
//代码注册一个广播接收者
receiver = new OutCallReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.NEW_OUTGOING_CALL")registerReceiver(receiver, filter);
取消在onDestroy():
//代码取消注册一个广播接收者
unregisterReceiver(receiver);
receiver = null;
演示功能
---------------------------------------------------------------------------------------------------------------------------------------------------------
四大组件
- Activity
- Service
- BroadCastReceiver
- ContentProvider
全栈工程师
android ios 服务器
归属地图片移动原理
插补器原理