実際、ハードウェアの戻るボタンが機能していません。したがって、私が構築しようとしているのは、クリックするとバックプレスを現在のアクティビティに送信できるフローティングビューです(私のフローティングビューはフォーカスされていないため、オーバーレイの下のアクティビティがフォーカスされています)。
したがって、次のコードを使用してオーバーレイ ビューを作成できました。
private void initialiseChatHead()
{
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
chatHead = new ImageView(this);
chatHead.setImageResource(R.drawable.ic_back);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 100;
windowManager.addView(chatHead, params);
gestureDetector = new GestureDetector(this, new SingleTapConfirm());
setOnTouchListener(params);
}
焦点が合っていないため、バックキーをディスパッチすると基になるアクティビティに移動すると思いましたが、これは機能しませんでした。
@Override
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event))
{
Toast.makeText(getApplicationContext(), "I am here", Toast.LENGTH_LONG).show();
v.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
return false;
}
}
これを行う方法を検索しているときに、まったく同じことをしているこのアプリに出くわしました。これには AccessibilityService を使用していると思いますが、方法がわかりません。誰でもこれを達成する方法を教えてもらえますか(基になるアクティビティにプレスを送り返します)。ありがとう!