任何的控件都是基于View类的,所以EditText的控件监听也是在View.java中实现的
1、在frameworks/base/core/java/android/view/View.java中注册广播接收填充的EditText信息
private Handler mscanHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
View mFocus = getRootView().findFocus();
//Log.i("123","hava scan message "+mFocus);
if(mFocus !=null&&mFocus instanceof EditText){
EditText mEdittext = (EditText) mFocus;
if(mEdittext.getText().toString().isEmpty()){
mEdittext.setText(msg.getData().getString("result"));
}else{
//mEdittext.setText("data");
}
}
}
};
BroadcastReceiver scanReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String testinfo = intent.getExtras().getString("result");
Message mMessage = new Message();
Bundle mBundle = new Bundle();
mBundle.putString("result", testinfo);
mMessage.setData(mBundle);
mscanHandler.sendMessage(mMessage);
}
};
private void inittestinfo(){
IntentFilter mIntentFilter = new IntentFilter("android.test.info");
mContext.registerReceiver(testReceiver, mIntentFilter);
}
在onFocusChanged函数中注册 inittestinfo()广播接收器
protected void onFocusChanged(boolean gainFocus, @FocusDirection int direction,
@Nullable Rect previouslyFocusedRect) {
if (gainFocus) {
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
} else {
notifyViewAccessibilityStateChangedIfNeeded(
AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);
}
//add test focus code
if(gainFocus){
inittestinfo();
}
..........
.........
}
且在clearFocusInternal函数中 取消注册广播接收器
mContext.unregisterReceiver(scanReceiver);
测试在你的APK中可以发送广播看是否所有的EditText会变成12345
Intent mIntent = new Intent("android.test.info");
mIntent.putExtra("result", "12345");
sendBroadcast(mIntent);