【问题标题】:c++ Console application connection to android appc ++控制台应用程序连接到android应用程序
【发布时间】:2016-01-07 14:59:05
【问题描述】:

我必须在 android 应用程序和 c++ 控制台应用程序之间建立连接: 控制台应用程序假设是客户端,它有 4 个命令从作为 android 设备的服务器获取数据。换句话说,我需要在控制台应用程序中显示设备信息(BT/WIFI 开/关,BATTERY LVL)。

我创建了客户端,我也有我必须检查的东西的代码(例如,如果 BT 是打开的)。 我唯一缺少的是这些之间的联系,我没有服务器代码方面的经验,我需要你的帮助,这是如何完成的或教程的链接,因为我没有找到。

安卓代码:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //IMEI init
    TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    IMEI = telephonyManager.getDeviceId();

    //software version init
    PackageInfo pInfo = null;
    try {
        pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    int SoftwareVersion = pInfo.versionCode;


    //battery lvl init
    battery = Library.getBatteryLevel(this);

    //android id init
    android_id = Secure.getString(this.getContentResolver(),
            Secure.ANDROID_ID);

    //android availability init
    internetaval = Library.isNetworkAvailable(this);

    //finish init  <<~~




    TextView tv = (TextView) findViewById(R.id.tv1);
    tv.setText(" " + internetaval);

    Library.setWifi(this,false);


}

【问题讨论】:

    标签: android c++ server console-application


    【解决方案1】:

    虽然你的问题太笼统,有待关闭,但我会给你一个忽略的线索来实现。

    使用 Java 网络 API(套接字编程),您应该选择一个端口号并开始监听。这里的关键是您的 Android 设备和运行该 C++ 应用程序的计算机必须连接到同一网络(例如 WLAN 或 LAN)。

    在这种情况下,您的两台设备都将被分配两个唯一的 IP 地址,您也可以手动设置它们。

    在您的客户端 (C++) 中,您应该创建一个 TCP 套接字并根据其端口号连接到您的 Android 设备的 IP 地址。因此,使用这种方式,您可以将 C++ 连接到在 Android 应用程序中运行的 Java 服务器。另一方面,您应该使用 Java 套接字 API 在您的 Android 应用程序中接受传入连接。

    建议:永远不要从头开始创建您的应用程序,始终使用知名的libraries。这使开发过程更快,也更愉快。 :)

    【讨论】:

    • 如果要分发给最终用户,蓝牙可能会更好,因为它包括服务发现。 WLAN 可能还需要诸如 uPNP 之类的东西,它的设置非常复杂。
    • @JanHudec 你是对的,但是许多计算机可能没有蓝牙适配器。另外蓝牙的范围很小(10m)。
    • @JanHudec 同样从服务发现的角度来看,一个简单的解决方案是扫描一系列 IP 地址。
    • 感谢您详细解释的答案!
    • @ZachBublil 请accept我的回答,如果你觉得有帮助的话。
    【解决方案2】:

    如果您的意思是您已经使用交叉编译器为您的 Android 设备创建了 C++。我可以启动并执行您自己的二进制应用程序,该应用程序已为您的 Android 应用程序构建。 最常见的用法是解压到/data/data/yourapp/somewhere 内的文件夹中,启动您自己的c++ 应用程序。然后,在单独的线程中启动此应用程序。 为了在 Java Android 和您的 C++ 应用程序之间进行交互,我可以为您提供 linux OS 的主要变体: 1. TCP-IP 服务器-客户端。 2.使用管道交互:FIFO(文件输入-文件输出)。 3. 或者只是简单地运行带有一些输入参数的 c++ 应用程序并得到结果。当然,您可以像在通常的操作系统中一样读取 sdtout 并写入 stdin。

    如果您的意思是普通的 Windows/MacOS/Linux 应用程序,您必须使用 WiFi/蓝牙/NFS/Lan/adb(Log)/ 连接与手机进行交互,您的设备是否已植根。也就是说,首先您必须定义必须使用的硬件。但在这种情况下主要交互:TCP-IP。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多