Android 安卓:启动意图和发送密钥
如何向刚开始的活动发送关键事件 我想我可以使用:Android 安卓:启动意图和发送密钥,android,key-events,Android,Key Events,如何向刚开始的活动发送关键事件 我想我可以使用: Instrumentation inst = new Instrumentation(); inst.sendKeyDownUpSync(KeyCode); 但它给了我(在UI线程或新线程中运行时): java.lang.RuntimeException:无法从 主应用程序线程 我必须在哪个线程上调用sendKeyDownUpSync() 以下是我启动活动的方式: public void openWhatsappConversation(Str
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此站点上有人解决了此问题(将关键事件发送到外部活动):
// 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);
}
}
});
}
简言之:
使用Android API(官方和内部),操作系统禁止向其他应用程序的活动发送关键事件。
但是,您可以在Linux操作系统级别执行此操作。但是,要使其工作,您需要根访问权限。您可以通过将每个键作为字符串赋予不同的含义来发送。我的意思是ESC=“0”,输入=“1”,然后使用putExtraString();在另一个活动getExtraString()上。我无法更改另一个活动。这就是为什么我想发送一个键事件(就像用户输入文本一样)。启动意图不是问题。这个代码有效。关键问题是如何向已启动的活动发送关键事件。