Android開発で小米携帯に応用されたバグのまとめ

5910 ワード

Android開発アプリ小米携帯に登場するバグのまとめ
一、入力ボックスが初めて英語を入力したときdelイベントに応答しない
小米の携帯電話の入力ボックスは初めて英語を入力するときにdelイベントに応答せず、入力数字が有効です(ネット上でvivoなどと言っても似たようなことがあります).カスタムM u l tiAutoCompleteTextViewのコントロール(このコントロールは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 studio 2.3の中で小米の携帯電話の上で直接プログラムを実行することができません
Android Studioが2.3にアップグレードされてから、小米の携帯電話で直接プログラムを実行できなくなり、「Installation failed with message Failed to establish session」というエラーが発生しました.
2つの解決策があります.
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最適化をオフにすると、すべてのアプリケーションが携帯電話のストレージにアクセスできないことがわかります.アプリケーションに権限判断と申請が加われば、処理されていないアプリケーションがクラッシュする可能性があります.コードが判断されていない場合は、まずセキュリティセンターでアクセス格納されている問い合わせを許可に変更すればよい.
続行...