Android开发中应用在小米手机上出现的bug汇总

Android开发应用在小米手机上出现的bug汇总


一、输入框第一次输入英文时候不响应del事件

小米手机输入框第一次输入英文时候不响应del事件,输入数字有效(网上说vivo等也有类似情况)。
我在代码中写了个自定义MultiAutoCompleteTextView的控件(这个控件是继承EditText的),然后通过如下代码设置了按删除建的回调方法。我这里发现的现象是,在小米手机中,当第一次输入英文的时候,按键盘的del键时,虽然可以删除英文,并不会回调下面的方法。而输入数字的时候却可以回调。在魅族手机测试可以正常回调。于是就知道是兼容问题了。

setDelKeyEventListener(new OnDelKeyEventListener() {            
            @Override
            public boolean onDeleteClick() {            
                return delete();
            }
        });

解决方法如下:

private OnDelKeyEventListener delKeyEventListener;

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
      InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
if (inputConnection == null){
            return null;
}
  return new MyInputConnection(inputConnection,
      true);
}
private class MyInputConnection extends InputConnectionWrapper {
  public MyInputConnection(InputConnection target, boolean mutable) {
    super(target, mutable);
  }
  @Override
  public boolean sendKeyEvent(KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN
        && event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
      if (delKeyEventListener != null &&  delKeyEventListener.onDeleteClick()) { //onDeleteClick返回true表示已经处理del事件

        return true;
      }  
    } 
    //这里是我项目需要屏蔽了空格和换行按键事件
    if (event.getAction() == KeyEvent.ACTION_DOWN
            && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER||event.getKeyCode() == KeyEvent.KEYCODE_SPACE 
            || event.getKeyCode() == KeyEvent.KEYCODE_TAB
            || event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE
                    )) {
            return true;           
        }

    return super.sendKeyEvent(event);
  }
  @Override
  public boolean deleteSurroundingText(int beforeLength, int afterLength) {
    if (beforeLength == 1 && afterLength == 0) {
      return sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,
          KeyEvent.KEYCODE_DEL))
          && sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP,
          KeyEvent.KEYCODE_DEL));
    }
    return super.deleteSurroundingText(beforeLength, afterLength);
  }

二、滑动事件冲突问题

在小米手机中经常会出现其他手机没有,而在小米手机中会出现的滑动冲突问题,导致内部的控件无法滑动。如在viewpager中,有个播放音频的控件,由于播放音频的进度条是可以左右滑动的,viewpager也是可以左右滑动的。这时候就会出现进度条滑动不了的问题(只可以点击)。解决方法也很简单,就是重写该控件,加上以下代码,通过内部拦截的方法,让子控件自己处理滑动事件:

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        getParent().requestDisallowInterceptTouchEvent(true);//这句话的作用 告诉父view,我的事件我自行处理,不要阻碍我  
        return super.dispatchTouchEvent(ev);
    }

三、在android studio2.3中无法直接在小米手机上运行程序

自从Android Studio升级到2.3之后,无法直接在小米手机上运行程序,出现错误“Installation failed with message Failed to establish session”

有两种解决办法:

1.关闭android Studio的Instant Run功能

(1)在Android Studio按以下路径寻找:File ->Settings -> Build,Execution,Deployment->Instant Run
(2)将Enable Instant Run to hot swap code/resource changes on deploy(default enabled)的选择框取消。

2.在手机的开发者模式中关闭MIUI优化

进入设置->更多设置->开发者选项->启用MIUI优化,点击关闭MIUI优化,关闭并重启手机即可。

四、关闭miui优化后问题

关闭miui优化后会发现所有应用都无法访问手机存储了,如果应用加了权限判断和申请的还好,没有处理的应用可能就会崩溃了。代码没判断的话可以先在安全中心中将访问存储的那个询问改成允许就可以了。

待续…

你可能感兴趣的:(Android)