android在不同的设备中通信两个应用程序

The*_*ian 11 android communication

这里的所有问题都指向相同应用程序的类或不同的应用程序在同一设备中的不同进程中.我想在两个独立的设备中向两个独立的应用程序发送数据.我尝试使用broadcastreceiver但它没有用.这是我发送数据的代码段.

addressstring = String.valueOf(acrilocation.getText());
            if (addressstring != null && addressstring.length() > 0){
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_SEND);
            intent.putExtra(Constants.LOCATION_DATA_EXTRA, addressstring);
            intent.setType("text/plain");
            sendBroadcast(intent);
            } else{
                Toast.makeText(getApplicationContext(), "Enter valid location address", Toast.LENGTH_SHORT).show();
            }
Run Code Online (Sandbox Code Playgroud)

但是当我使用以下代码片段在我的其他应用程序中收到数据时,它会失败.当我调试应用程序时,我得到null异常.

Intent intent = getIntent();
        String action = intent.getAction();
        String data = intent.getStringExtra(Intent.EXTRA_INTENT);
        String type = intent.getType();
        useraddress.setText(data);
           startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

还有另一种方法来实现这一目标吗?我的意思是发送数据到另一个设备中安装的另一个应用程序?

Mic*_*ick 5

通过接受传入套接字连接的网络连接

在Android设备之间(或任何对等设备之间)执行此操作的常用方法是使用套接字.

您设置一个或两个设备以"侦听"套接字上的连接,然后在他们想要通信时接受来自另一个的连接(或者您可以拥有专用的客户端和服务器,并且客户端始终启动连接).

建立连接后,您可以来回发送消息.

Android客户端服务器套接字应用程序有很多例子,但我发现有用的是:

请注意,您可能必须在此基础上添加自己的"协议" - 例如,如果您发送的文件长度未知且没有任何特殊的"结束"字符,您可能需要添加一个字节(或几个字节来表示int,long etc)在开始时指示传输的长度,以便接收方知道它何时收到了所有内容(或者在发生错误时它没有收到所有内容).

通过不允许传入连接的网络连接(例如大多数3G/4G)

在这些情况下,虽然理论上没有任何东西可以阻止套接字工作,但实际上许多移动运营商都不允许传入套接字连接.此外,您需要找到移动设备的公共IP地址,这可能是额外的复杂性.如果您的解决方案只能在单个运营商网络上运行,您可以尝试并查看它是否有效,但如果没有,您可能会发现在"中间"使用服务器更好更容易:

  • 设备A连接到服务器
  • 设备B连接到服务器
  • 设备A向服务器请求连接设备的地址并"发现"设备B.
  • 设备A为设备B发送消息.它实际上将消息发送到服务器,并指示它将被发送到设备B.
  • 服务器通知设备B有消息可用(例如,使用某种类型的消息通知,例如Google Cloud Messaging,或者只是定期轮询设备以查看它们是否有任何消息).
  • 设备B从服务器检索消息

以上几乎适用于任何允许连接到互联网的网络.它确实有需要服务器的缺点,但它可能是大多数移动网络的必要方法.