5

SO が「これを行うにはどうすればよいか」という質問にひどく眉をひそめていることは知っていますが、今回はそれを回避する方法がわかりません。

私はベテランで熟練した Android 開発者なので、この質問をするのは本当にばかげていますが、このアプリ をインストールしたところ、不可能だと思っていたことを実行してくれます。

つまり、画面のジェスチャをリッスンします (この場合は、画面の端から内側にスワイプします) デバイスのどこにいるかに関係なく...つまり、ランチャーのホーム画面にいるときと、画面にいるときにリッスンします他のアプリ...何をしていてもリッスンしており、画面の端からのスワイプを検出すると、非表示の設定ドロワーを表示し、その上に透明な (フラグメント? ダイアログ?)Viewとして表示されます他のどのアプリを使用していても、([戻る] を押して) 閉じると、以前のエクスペリエンスのどこにでも移動できます。

正直なところ、これがどのように可能であるかはわかりませんが、正しい方向へのナッジが本当に大好きです. [編集]ここに画像の説明を入力

4

2 に答える 2

4

あなたが処理しなければならない2つのことがあります:

  1. 上のビューを示しています。このためには、特別な権限TYPE_SYSTEM_ALERTを使用する必要があります。上にビューを表示するためのコードは次のとおりです。

    final WindowManager.LayoutParams param=new WindowManager.LayoutParams();
    param.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
    final View view=findViewById(R.id.view1);
    final ViewGroup parent=(ViewGroup)view.getParent();
    if(parent!=null)
      parent.removeView(view);
    param.format=PixelFormat.RGBA_8888;
    param.type=WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
    param.gravity=Gravity.TOP|Gravity.LEFT;
    param.width=view.getLayoutParams().width;
    param.height=view.getLayoutParams().height;
    final WindowManager wmgr=(WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
    wmgr.addView(view,param);
    // TODO handle overlapping title bar and/or action bar
    // TODO you must add logic to remove the view
    // TODO you must use a special permission to use this method :android.permission.SYSTEM_ALERT_WINDOW
    
  2. アプリを存続させます。このためには、フォアグラウンドで実行されるサービスを作成する必要があります。つまり、通知を使用します。ここにリンクがあります。

この機能を持つアプリはたくさんあります。私が最初に見たのはAirCalc でした。

于 2013-07-28T18:10:12.820 に答える
3

これは現在、Android 4.0.3+ でプラグインされているセキュリティの脆弱性と見なされています: Question: ICS のTYPE_SYSTEM_OVERLAY IMHO、この機能に依存するものを作成することは、将来のバージョンで他の方法が見つかった場合に正式にパッチが適用されるようになったため、避ける必要があります。ただし、その質問には 4.0.3+ でそれを行う方法を示す回答があります。そのルートに進むことを選択した場合、新しいバージョンの Android ではそれを行う能力が失われる可能性があることに注意してください。

于 2013-07-28T17:55:13.143 に答える