web-dev-qa-db-ja.com

アプリ内のアプリ

別のアプリケーション内からアプリケーションを実行することは可能ですか?私がやりたいのは、起動するアプリを選択して、このアプリのアクティビティをビュー内に表示できるアプリを作成することです。

したがって、ランドスケープモードでは、次のようになります。

enter image description here

この背後にある考え方は:

自分のアクティビティの隣でサードパーティのアクティビティを開始して実行できるようにしたい。また、サードパーティのアクティビティを制御するアクティビティを使用して個別のマクロを作成できるようにしたい。

基本的には次のようなものです:

  • アプリ内からサードパーティのアクティビティを開始します
  • マクロ録音を開始
  • サードパーティの活動で何かをする
  • マクロ録音を停止します
  • いつでもmakroを使用してください

では、自分のアクティビティ内から別のアクティビティを開始および制御するにはどうすればよいですか?

14
PKlumpp

ルート解除:
残念ながら、インテントを介してのみ他のアプリとやり取りできるため、スマートフォンをルート化しないと、達成したいことは不可能なようです。開発者はアプリが特定のインテントにどのように反応するかを決定するため、この方法でマクロを作成することはほぼ不可能です。

root化された電話の場合:

  1. インストールされているすべてのアプリのリストを作成することをお勧めします。

    getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA);
    

    インストールされているすべてのアプリのリストを取得します。

  2. ユーザーがアプリを選択した場合は、インテントを介してアプリを起動し、すべてのタッチ/キーイベントを取得するためのシステムオーバーレイを作成します(ユーザーにマクロを停止させます)。これを行う方法を見つけることができます ここ 。タッチイベントのx/y値を保存します。
  3. MotionEvent#obtain を使用してイベントを再作成できます。
  4. 今、あなたが根ざした電話を必要とする部分が来ます(許可 INJECT_EVENTS )。アプリを起動し、イベントを挿入マクロが実行されるようにします。サンプルコード:

    Instrumentation m_Instrumentation = new Instrumentation();
    m_Instrumentation.sendPointerSync(motionEvent);
    

    インジェクション(キーイベントも)に関する詳細情報を見つけることができます ここ

  5. アプリのコンパイルにヘルプが必要な場合は、次の2つのリンクが役立ちます: コンパイル方法Androidシステム権限を持つアプリケーションAndroid INJECT_EVENTS権限 ==

21
CommonGuy

Viewでアプリケーションを起動することはできませんが、アプリ内からアプリを起動することはできます。

_ Intent i = getPackageManager().getLaunchIntentForPackage("com.package.ofapp");
 startActivity(i);
_

//更新された質問を編集します:

上記のコードからアクティビティを開始した後、新しいアプリでいつでもマクロを開始/停止できる1つの方法は、画面の上部に小さなビューオーバーレイを作成することです。

このオーバーレイは、すべてのアクティビティの上にあります。

次のリンクを確認してください: システムオーバーレイウィンドウの作成(常に上部)

ビューが押されたときにマクロを開始するコードを記述し、ボタンを1回押してユーザーがもう一度押すと、マクロを停止できます。これはonTouchEvent()メソッドにあります。

4
MJ93

はい、フローティングアプリという名前のアプリがそれを行うので可能だと思います(ルートなし)

一部のadbコマンドのみを使用

https://play.google.com/store/apps/details?id=com.lwi.Android.flapps

0
Biswajit