我正在編寫android下的C++本機應用程序,我需要廣播一些意圖。這可能嗎?從Android-NDK應用程序發送意圖
如果你要我指向JNI,請給我更多的細節,因爲我不知道如何做到這一點:)
如果這是不可能的,我會做的是具有NDK守護進程和Java-Android服務之間的命名管道。 NDK守護進程將寫入命名管道,然後Java-Android-Service將發佈該意圖。
有沒有更好的方法?
我正在編寫android下的C++本機應用程序,我需要廣播一些意圖。這可能嗎?從Android-NDK應用程序發送意圖
如果你要我指向JNI,請給我更多的細節,因爲我不知道如何做到這一點:)
如果這是不可能的,我會做的是具有NDK守護進程和Java-Android服務之間的命名管道。 NDK守護進程將寫入命名管道,然後Java-Android-Service將發佈該意圖。
有沒有更好的方法?
本地不能發送Intents,這是目前NDK的一個已知限制(可能它將在未來實現)。
因此,您需要做的是使用JNI在您想要廣播Intent(如果您需要知道如何完成這項工作時可以使用Google JNI和upcall)並使用Java代碼創建發送意圖。因此,如果您通過Java活動啓動您的應用程序並通過JNI調用本地代碼,則只需在Java中實現另一種可以接收您的上傳的方法即可。我不知道你知道多少JNI,但維基百科信息應該讓你開始足夠好。
有一個am
命令,您可以運行該命令將發送Intents到活動或服務。
const char *cmd = "am startservice -a %s"
" --ei ars_flag 2 --ei invitationType %d"
" --ei mode 1 --es ars_gadget_uuid \"%s\""
" --ei ars_conn_handle %d"
" --es ars_user_uuid \"%s\" --es ars_username \"%s\"";
sprintf (cmdbuffer, cmd, ...);
system (cmdbuffer);
加入'--user 0'可能也有幫助。例如。 'startservice --user 0 -a ...' – Tamas 2014-06-07 15:57:59
除了理論,我對JNI一無所知。由於我的應用程序是純粹的C++,我知道這很難。我假設了一個創建JVM的完整示例,意圖在這裏沒有用... ...? – elcuco 2012-04-04 14:25:09
我不知道當時不可能,但現在完全可行。未來的搜索不應該認爲這個答案是完全正確的。 – eozgonul 2014-03-11 12:58:57