代码改变世界

抽象接口的过程小结

2017-08-07 15:23  tlnshuju  阅读(202)  评论(0编辑  收藏  举报

今天做项目的时候遇到需求顺便小结下自己抽象为接口定义共同拥有的抽象方法:

1.需求:

在MainActivity中通过一个广播(单独的一个文件类)来监听传感器是否插入。拔出,重写广播的onReciver方法,

推断status(连接状态)获得Context对象,转换为MainActivity然后调用MainActivity连接成功的方法和拔出方法

更新MainActivity相关的UI或数据

2.分析:

(1)考虑到其它多个页面也可能须要监听传感器是否插入也就是仅仅有连接上和未连接上两种状态(connected和unConnected)

(2)每一个界面须要更新的UI或数据可能不同

(3)为了复用一个广播类

3.方法:

(1)创建IHeadxxx接口包含connected()和unConnected()抽象方法

(2)在MainActivity和要注冊监听传感器是否插的Activity类实现IHeadxxx接口重写connected()和unConnected()抽象方法

完毕对应的操作

总结:有时候知道有多个类要必需要做相同的事,可是详细做什么又不知道,接口体现的是一种能力一种约定

先写到这里有时间再贴代码

代码片段:

接口:

IHeadsetPlugStates.java

/**
 * 设备连接状态的监听的Activity须要实现这个接口
 * @author lqm
 *
 */
public interface IHeadsetPlugStates{  
/**
* 连接成功的方法
*/
public void conected();
/**
* 未连接或者拔出或连接失败等
*/
public void unConected();

}  

广播类:

HeadsetPlugReceiver.java

/**
 * 监听设备是否连接
 *
 */
public class HeadsetPlugReceiver extends BroadcastReceiver {  


@Override  
public void onReceive(Context context, Intent intent) {  
if(intent.hasExtra("state")){  
if(intent.getIntExtra("state", 0)==0){  
if(context instanceof IHeadsetPlugStates){
IHeadsetPlugStates main= (IHeadsetPlugStates) context;
main.unConected();
}else{
try {
throw new Exception("监听设备未实现HeadsetPlugReceiver接口,请实现HeadsetPlugReceiver接口");
} catch (Exception e) {
e.printStackTrace();
}
}
}  
else if(intent.getIntExtra("state", 0)==1){  
 
if(context instanceof IHeadsetPlugStates){
IHeadsetPlugStates main=(IHeadsetPlugStates) context;
main.conected();
}else{
try {
throw new Exception("监听设备未实现HeadsetPlugReceiver接口。请实现HeadsetPlugReceiver接口");
} catch (Exception e) {
e.printStackTrace();
}
}
}  
}  
}  



}  



MainActivity.java

public class MainActivity extends Activity implements IHeadsetPlugStates {

/**
* 未连接或者拔出或连接失败等
*/
@Override
public void unConected() {
tvState.setText(R.string.index_bttom_lable2_fail);
liConnectlayout.setVisibility(View.GONE);
reUnConnectlayout.setVisibility(View.VISIBLE);
setValueOfElectricity(0);
isConnect=false;
fistgetPover=false;
}

/**
* 连接成功的方法
*/
@Override
public void conected() {

。。。

}


}