2016-01-07 266 views
1

我必須在android應用程序和C++控制檯應用程序之間建立連接: 控制檯應用程序假設是客戶端,它有4個命令從服務器獲取數據,這是android設備。換句話說,我需要在控制檯應用程序中顯示設備信息(BT/WIFI開/關,BATTERY LVL)。C++控制檯應用程序連接到android應用程序

我創建了客戶端,我也有我必須檢查的東西(如BT例如)的代碼。 我唯一缺少的是這些之間的聯繫,我沒有經驗的服務器代碼,我需要你的幫助,這是如何完成的或者教程的鏈接導致我沒有找到一些。

了android代碼:

@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); 


} 

回答

2

雖然你的問題過於寬泛,受到被關閉,我會給你一個俯瞰線索實施。

使用Java網絡API(套接字編程),您應該選擇一個端口號並開始監聽。關鍵在於您的Android設備和運行該C++應用程序的計算機必須連接到同一網絡(例如WLAN或LAN)。

在這種情況下,您的設備將被分配兩個唯一的IP地址,您也可以手動設置它們。

在您的客戶端(C++)中,您應該創建一個TCP套接字並根據其端口號連接到您的Android設備的IP地址。因此,使用這種方式,您可以將C++連接到在您的Android應用程序中運行的Java服務器。另外在另一方面,您應該使用Java套接字API在您的Android應用中接受傳入連接。

建議:決不從頭開始創建你的應用程序,始終使用知名libraries。這使得開發過程更快,更令人愉快。 :)

+0

如果這是要分發給最終用戶,藍牙可能會更好,因爲它包括服務發現。無線局域網可能還需要類似uPNP這樣的東西,這對安裝來說是相當多的額外複雜因素。 –

+0

@JanHudec你說的對,不過很多電腦可能沒有藍牙適配器。另外藍牙的範圍很小(10米)。 –

+0

@JanHudec同樣在服務發現的角度來看,一個簡單的解決方案是掃描一系列IP地址。 –

0

如果你的意思是你已經使用交叉編譯器爲你的Android設備創建了一個C++。我可以啓動並執行您自己的二進制應用程序已經爲您的Android應用程序建立。 最常用的用法是解壓到/data/data/yourapp/somewhere裏面的一個文件夾啓動你自己的C++程序。然後,在單獨的線程中啓動此應用程序。 要在Java Android和您的C++應用程序之間進行交互,我可以爲您提供針對linux操作系統的主要變體: 1. TCP-IP服務器 - 客戶端。 2.使用管道交互:FIFO(文件輸出)。 3.或者只是簡單地運行你的c + +應用程序與一些輸入參數與結果。當然,你可以像在通常的操作系統中那樣讀取sdtout並寫入stdin。

如果您是指通常的Windows/MacOS/Linux應用程序,您必須使用WiFi/BlueTooth/NFS/Lan/adb(日誌)/連接與手機進行交互,是您的設備的根源。也就是說,首先你必須定義你必須使用哪個硬件。但在這種情況下主要相互作用:TCP-IP。