无法连接到android 5.1上的本机本地套接字
我有commad line工具,它发送广播和等待结果 服务器代码(省略错误处理): Java客户端代码:无法连接到android 5.1上的本机本地套接字,android,sockets,android-ndk,android-networking,unix-socket,Android,Sockets,Android Ndk,Android Networking,Unix Socket,我有commad line工具,它发送广播和等待结果 服务器代码(省略错误处理): Java客户端代码: public class CommandReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { LocalSocket socket = new LocalSocket(); L
public class CommandReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
LocalSocket socket = new LocalSocket();
LocalSocketAddress address = new LocalSocketAddress("SOCKET_NAME", LocalSocketAddress.Namespace.ABSTRACT);
socket.connect(address);
// Do something and send result asynchronously
这一切都可以在android 5.1之前的版本上运行
在android 5.1 connect()上引发异常:
java.io.IOException:权限被拒绝
位于android.net.LocalSocketImpl.connectLocal(本机方法)
在android.net.LocalSocketImpl.connect上(LocalSocketImpl.java:290)
在android.net.LocalSocket.connect上(LocalSocket.java:130)
在日志中出现错误:
07-27 09:56:08.179:W:type=1400审核(0.0:3675):avc:denied{connectto}for path=00636F6D2E6B6173706572736B792E6B61736865C6C2E534F43B4542D36313833836313732313433373938373637 scontext=u:r:untrusted\u应用程序:s0 tcntext=u:r:shell:s0 tclass=unix\u流\u套接字许可=0
我找到了相对的安卓修复程序:
那么,自从安卓5.1之后,它就不再工作了?
我能做什么(也许以某种方式设置权限)?
或者是否有其他机制从本机命令行工具发送数据并等待结果?使用管道而不是套接字: 在java进程中创建管道:
mkfifo(cpath, 0);
chmod(cpath, S_IRWXU|S_IROTH|S_IRGRP);
本机进程中的开放管道:
int serverFd = open(PIPE_NAME, O_RDONLY | O_NONBLOCK);
pollfd pollFd = {0};
pollFd.fd = serverFd.get();
pollFd.events = POLLIN | POLLRDHUP;
// send command
....
for(;;)
{
int pollResult = poll(&pollFd, 1, timeout);
int serverFd = open(PIPE_NAME, O_RDONLY | O_NONBLOCK);
pollfd pollFd = {0};
pollFd.fd = serverFd.get();
pollFd.events = POLLIN | POLLRDHUP;
// send command
....
for(;;)
{
int pollResult = poll(&pollFd, 1, timeout);