2017-02-26 21 views
0

私はAndroidスタジオによる仮想マウスカーソルのプログラミングを行っています。これはこのwebsiteとそのcodeの例です。オーバーレイカーソルと次のコードをホーム画面に戻しています。Androidの仮想マウスカーソルはアプリの外をクリックできません

Intent newActivity = new Intent(Intent.ACTION_MAIN); 
newActivity.addCategory(Intent.CATEGORY_HOME); 
newActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(newActivity); 

私の問題は、ビューが私のアプリ(多分ホームスクリーンまたは他のアプリ)の外にあるときに私のカーソルにクリックアクションを適用する方法です。私はこの

Instrumentation m_Instrumentation = new Instrumentation(); 
m_Instrumentation.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,new_x, new_y, 0)); 
m_Instrumentation.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, new_x, new_y, 0)); 

を試してみましたが、それは別のアプリケーションに注入

を示すINJECT_EVENTS許可が必要です。

次に、AndroidManifest.xmlに <uses-permission android:name="android.permission.INJECT_EVENTS"/>を追加しました。 「システムアプリケーションにのみ許可が与えられています」というエラーがあります。そのため、仮想アプリを使用して仮想クリックを実行することはできません。私が検査システムを閉めれば、私のアプリにはまだ動作しません。 (他のアプリを開くには、ホーム画面で使用することはできません。)

dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis() + 100, MotionEvent.ACTION_DOWN, new_x, new_y, 0)); 
dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis() + 100, MotionEvent.ACTION_UP, new_x, new_y, 0)); 

感謝をご返信するため

はその後、私はハンドラでdispatchTouchEventを試みたが、それだけのアプリ自分で動作します。
私のシミュレートされたモバイルデバイスはAndroid 4.4.2です。
コンパイルSDKのバージョン:アンドロイド6.0
ビルド・ツールのバージョン:24.0.3

答えて

0

あなたがすることはできません。セキュリティ上の理由から許可されていません。セキュリティ目的で、あるアプリが別のアプリに別のアプリにコマンドを送信することはできません。計測器は単体テスト用ですが、テストスイートが同じアプリケーションの一部であるためにのみ動作します。

+0

感謝を使用してクリック数を送信するために管理。電話をかけた場合、プロジェクトでINJECT_EVENTSの許可をどのように開くことができますか? –

+0

マニフェストに権限を追加してから、システムのアプリケーションディレクトリ(バージョンによっては、/ system/apps、/ system/priv-apps)に自分自身をインストールする必要があります。そこにインストールされているアプリは、システム権限を要求できます。だから、それはプレイストアのアプリでは動作しませんが、それは個人的なアプリのために大丈夫になります。 –

+0

システムをルートするために[this](https://kingroot.net/#)をインストールしてから、AndroidManifestにINJECT_EVENTS権限を追加しました。ただし、別のアプリケーションへのインジェクションには、デバッグウィンドウにINJECT_EVENTS権限**が必要です。 –

0

あなたは、このリンクは役に立ち見つけるかもしれない:)

https://github.com/chetbox/android-mouse-cursor

それは応援なしだと、彼はそれらの線に

private void click() { 
    Log.d(TAG, String.format("Click [%d, %d]", cursorLayout.x, cursorLayout.y)); 
    AccessibilityNodeInfo nodeInfo = getRootInActiveWindow(); 
    if (nodeInfo == null) return; 
    AccessibilityNodeInfo nearestNodeToMouse = findSmallestNodeAtPoint(nodeInfo, cursorLayout.x, cursorLayout.y + 50); 
    if (nearestNodeToMouse != null) { 
     logNodeHierachy(nearestNodeToMouse, 0); 
     nearestNodeToMouse.performAction(AccessibilityNodeInfo.ACTION_CLICK); 
    } 
    nodeInfo.recycle(); 
} 
関連する問題