2

開始したばかりのアクティビティにキー イベントを送信するにはどうすればよいですか?

私は使用できる送信のために考えました:

Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyCode);

しかし、それは私に与えます(UIスレッドまたは新しいスレッドで実行している場合):

java.lang.RuntimeException: このメソッドは、メイン アプリケーション スレッドから呼び出すことはできません

どのスレッドで呼び出す必要がありますsendKeyDownUpSync()か?

アクティビティを起動する方法は次のとおりです。

public void openWhatsappConversation(String whatsappid) {
    whatsappid = "4917012345678@s.whatsapp.net";

    Cursor c = getContentResolver().query(
            ContactsContract.Data.CONTENT_URI,
            new String[] { ContactsContract.Contacts.Data._ID },
            ContactsContract.Data.DATA1 + "=?",
            new String[] { whatsappid }, null);
    c.moveToFirst();

    Intent whatsapp = new Intent(Intent.ACTION_VIEW,
            Uri.parse("content://com.android.contacts/data/"
                    + c.getString(0)));

    whatsapp.putExtra(Intent.EXTRA_TEXT, "whatsapp");//

    c.close();

    if (whatsapp != null) {

        startActivity(whatsapp);

    } else {
        Toast.makeText(this, "WhatsApp not Installed", Toast.LENGTH_SHORT)
                .show();
        // download for example after dialog
        Uri uri = Uri.parse("market://details?id=com.whatsapp");
        Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
    }

}

権限が必要です: android.permission.READ_CONTACTS

4

2 に答える 2

2

このサイトで、誰かがこの問題を解決しました (重要なイベントを外部アクティビティに送信する): http://www.pocketmagic.net/2012/04/injecting-events-programatically-on-android/#.Ui81ddyg2f0

つまり、Android API (公式および内部) を使用すると、OS は重要なイベントを他のアプリのアクティビティに送信することを禁止します。ただし、Linux OS レベルで実行できます。ただし、これが機能するには、root アクセスが必要です。

于 2013-09-10T16:16:44.370 に答える
0
// try this
public void openWhatsappConversation(String whatsappid) {

        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                 whatsappid = "4917012345678@s.whatsapp.net";

                    Cursor c = getContentResolver().query(
                            ContactsContract.Data.CONTENT_URI,
                            new String[] { ContactsContract.Contacts.Data._ID },
                            ContactsContract.Data.DATA1 + "=?",
                            new String[] { whatsappid }, null);
                    c.moveToFirst();

                    Intent whatsapp = new Intent(Intent.ACTION_VIEW,
                            Uri.parse("content://com.android.contacts/data/"
                                    + c.getString(0)));

                    whatsapp.putExtra(Intent.EXTRA_TEXT, "whatsapp");//

                    c.close();

                    if (whatsapp != null) {

                        startActivity(whatsapp);

                    } else {
                        Toast.makeText(YourActivityName.this, "WhatsApp not Installed", Toast.LENGTH_SHORT)
                                .show();
                        // download for example after dialog
                        Uri uri = Uri.parse("market://details?id=com.whatsapp");
                        Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
                    }

                }

        });
    }
于 2013-09-10T06:29:54.443 に答える