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

待续…

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值