Android 从 Java 向 JNI 发送系统消息

Android send a system message from Java to JNI

我的APP里有一个JAVA和一个JNI层。
是否可以从Java层发送消息到系统消息池,然后在JNI层获取消息?

由于某些原因,我不能直接从Java调用JNI方法,我必须在Android中找到一个像Windows的WndProc这样的消息方法。

您可以使用套接字在 Java 和 JNI 之间进行通信。在JNI中设置一个socket服务器监听客户端连接,然后在Java.

中使用socket连接服务器

JNI 中的套接字服务器。

struct sockaddr_in serv_addr;
int sockfd, connfd;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&serv_addr, 0, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(6666);

bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
listen(sockfd, 10);

while (1) {
    connfd = accept(sockfd, (struct sockaddr*)NULL, NULL);
    time_t result;
    time(&result);
    cout << "connecting from java " << ctime(&result);

    char buffer[1024] = { 0 };
    read(connfd, buffer, sizeof(buffer)/sizeof(char));

    cout << "receive command... " << buffer << endl;
    close(connfd);
    if (strcmp(buffer, "END") == 0) {
        cout << "socket thread terminate" << endl;
        break;
    }
}

Java

中的套接字客户端
    for (int i = 0; i < 3; i++) {
        try {
            Socket socket = new Socket(Inet4Address.getByName("localhost"), 6666);

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            switch (i) {
            case 0:
                writer.write("ADD");
                break;
            case 1:
                writer.write("SUB");
                break;
            case 2:
                writer.write("END");
                break;

            default:
                break;
            }
            Thread.sleep(2000);
            writer.flush();
            socket.close();
        } catch (IOException | InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }