2016-09-26 5 views
1

この質問はに関連している:https://stackoverflow.com/questions/39661583/android-linux-deploy-access-phone-sensorsソケット

私が根付い三星ギャラクシーS3を持って、私はLinuxのデプロイhttps://play.google.com/store/apps/details?id=ru.meefik.linuxdeploy&hl=en_GBを使用して電話でのUbuntuをインストールしました。これは、ubuntuが 'chrooted'(https://en.wikipedia.org/wiki/Chroot)envで動作し、電話のアンドロイド部分のファイルに直接アクセスできないことを意味します。

2つのOS間の通信を設定して、私が電話機能にアクセスするubuntu OSからメソッドを呼び出せるようにしたいと考えています。

私は、ソケットサーバーとして機能するアンドロイド部分に単純なアプリを書くことでこれを行うことができると思いました。私はその後、アンドロイドアプリ上のソケットに接続するubuntuで動作するシンプルなクライアントJavaプログラムを持っています。

これは私がこれまで持っているものです。

アンドロイドMainActivity.javaファイル:

package com.example.sam.myfirstapp; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class MainActivity extends AppCompatActivity { 
    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"; 

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

    public void go(View view){ 
     try{ 
      ServerSocket serverSock = new ServerSocket(4242); 

      while(true){ 
       Socket sock = serverSock.accept(); 
       PrintWriter writer = new PrintWriter(sock.getOutputStream()); 
       String advice ="This is my sent message"; 
       writer.println(advice); 
       writer.close(); 

      } 
     } catch (IOException ex){ 
      ex.printStackTrace(); 
     } 
    } 
} 

activity_main.xmlファイル:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <EditText android:id="@+id/edit_message" 
     android:layout_weight="1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:hint="@string/edit_message" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/button_start" 
     android:onClick="go"/> 
</LinearLayout> 

Ubuntuの上で動作するJavaファイルがあります:

サーバーとクライアントの両方が正常にコンパイルされているようです。 私はアンドロイドでアプリケーションを実行し、ボタンをクリックしてサーバーを開始します。 私はubuntuに行き、javaプログラムを実行します。

javaプログラムによって接続の拒否例外が発生します。

osの間のこの通信方法は可能ですか?もしそうなら、何がうまくいかず、どのように修正するのですか?

+0

どのようにクライアントのIP、192.168.0.10を確認できますか?私は試してみる、127.0.0.1とlocalhost – Adem

+0

はい私はそれらを最初に試みたが、接続が拒否された。だから、私はルータが使用していたIPをルックアップしてみましたが、まだ接続はエラーを拒否しました。 – user27815

+0

サーバーは機能していますか? – dcow

答えて

0

サーバーをServiceで実行してみてください。

+0

例を挙げることができますか?私は試しました: 'public void go(表示ビュー){ インテントの意図=新しいインテント(this、HelloIntentService.class); startService(インテント); { TimeUnit.MINUTES.sleep(2); stopService(インテント)。 } catch(例外ex){ stopService(インテント); } } with .. – user27815

+0

パブリッククラスHelloIntentService extends IntentService { public HelloIntentService(){ super( "HelloIntentService"); } @Override protected void onHandleIntent(Intent intent){try { } ServerSocket serverSock =新しいServerSocket(4242); while(true){ソケットsock = serverSock.accept(); PrintWriterライター= new PrintWriter(sock.getOutputStream()) ;文字列advice = "メッセージ"; writer.println(advice);作者: 閉じる(); } } catch(IOException ex){ ex.printStackTrace(); }} } ' – user27815

+0

あなたはchroot環境で何にも接続できますか? – dcow