2016-04-27 10 views
1

2つのデバイスがwifi directを使用して接続し、JSONファイル形式のメッセージを1つのデバイスから別のデバイスに送信して解析できるアプリケーションを作成しようとしていますそのファイルをテキストビューに変換します。これまでのところ、私はそれが非常に難しいことを知っていて、私のプロジェクトの「簡単な」部分から始めたいと思っているので、Wi-Fiの部分については心配していません。私は今までこのコードを持っています。JSONファイルを作成し、Wi-Fiダイレクトを使用して他のデバイスに送信

import android.content.Context; 
import android.net.wifi.WifiInfo; 
import android.net.wifi.WifiManager; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

import org.json.JSONArray; 
import org.json.JSONObject; 

import java.text.DateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

    EditText edtx1; 
    TextView txvw1; 
    TextView txvw2; 
    TextView txvw3; 
    TextView txvw4; 
    TextView txvw5; 
    Button btn; 
    String Message; 
    String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date()); 

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

     btn = (Button) findViewById(R.id.button); 
     btn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       edtx1 = (EditText) findViewById(R.id.editText1); 
       txvw1 = (TextView) findViewById(R.id.textView1); 
       txvw2 = (TextView) findViewById(R.id.textView2); 
       txvw3 = (TextView) findViewById(R.id.textView3); 
       txvw4 = (TextView) findViewById(R.id.textView4); 
       txvw5 = (TextView) findViewById(R.id.textView5); 
       //txvw1.setText(edtx1.getText().toString()); 
       makeJSON(); 
      } 
     }); 
    } 

    public JSONArray makeJSON() { 
     JSONArray jArr = new JSONArray(); 
     JSONObject jObj = new JSONObject(); 
     try { 

      WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
      WifiInfo wInfo = wifiManager.getConnectionInfo(); 
      String macAddress = wInfo.getMacAddress(); 

      //Long tsLong = System.currentTimeMillis()/1000; 
      //String ts = tsLong.toString(); 

      jObj.put("Created_on:", currentDateTimeString); 
      jObj.put("Sent_by:", Build.MODEL); 
      jObj.put("MAC_Address:", macAddress); 
      jObj.put("Number_of_Hops:", 1); 
      jObj.put("Message:", edtx1.getText()); 

      txvw1.setText(jObj.getString("Created_on:")); 
      txvw2.setText(jObj.getString("Sent_by:")); 
      txvw3.setText(jObj.getString("MAC_Address:")); 
      txvw4.setText(jObj.getString("Number_of_Hops:")); 
      txvw5.setText(jObj.getString("Message:")); 

      jArr.put(jObj); 

     } catch (Exception e) { 
      System.out.println("Error:" + e); 
     } 

     return jArr; 
    } 
} 

私はボタンを持っていて、クリックしたときに、edittextの情報をmessageというjsonオブジェクトに送ります。だから最後に私はこのような何かを持っています

{ 
    "Created on": Date, 
    "Sent By": "name", 
    "MAC Address": "FF:FF:FF:FF:FF:FF", 
    "Number of Hops": "This number I will figure it out later", 
    "Message": "Message" 
} 

そして、そのファイルを他のデバイスに送ります。

UPDATE:私は上記のコードを編集し、今では一種の、少なくとも私が思うに、私が欲しいものをやっている、働いて

。ここで問題となるのは、デバイス名とMACアドレスです。私は今MACアドレスは、アプリ内で撮影することはできませんが、私はちょうどその部分を埋めることができ、静的にすることができます知っている。しかし、どうすれば私のデバイスが "Daniel"と呼ばれるデバイスの名前を取得することができますか?

答えて

0

これはテストしていませんが、これが役立つ可能性があります。ここで

は、あなたがそれらを必要とする場合に、無線LAN-ダイレクトを使用するための公式ドキュメントは、あなたが文字列としてあなたのJSONオブジェクトを介して送信しようとすることができます

android docs: wifi-direct

です(私はときに私しなければならないその何私のサーバーにPOST)、反対側では標準のJSONのように解析します。

Uri.Builder builder = new Uri.Builder(); 
builder.appendQueryParameter("key_1", "value_1"); 
builder.appendQueryParameter("key_2", "value_2"); 
String json = builder.build().getEncodedQuery(); 

あなたは、あなたがそれからデータを取得し、.setText(で設定することができ構築されたクラスを持っていたら)

は、あなたがそれを行う方法についての例が必要な場合は私に知らせてください。

--- EDIT ---

限り、あなたのデバイス名を取得して、私は限り、あなたはbluetoothの許可を求めると大丈夫ですと、あなたのために働く必要がありますこのコードのスニペットを見つけました。

マニフェスト

<uses-permission android:name="android.permission.BLUETOOTH" /> 

とあなたのコード

public String getPhoneName(){ 
    BluetoothAdapter myDevice = BluetoothAdapter.getDefaultAdapter(); 
    String deviceName = myDevice.getName();  
    return deviceName; 
} 
+0

内にこれを追加するには、あなたの助けトーマスいただきありがとうございます。私はJsonオブジェクトを作成し、それを同じデバイスに表示することができました(これは、ポルポイズをテストしています)。私は自分のコードを編集して、それを見て、それを改善するためにできることがあるかどうかを教えてくれます。実際には、私はjsonオブジェクトを作成しているのか、作成する前にビューにポストしているのかはまだ分かりません。 –

+0

あなたの助けをもう一度トマスありがとう私はあなたがデバイスの名前を取得するために投稿したコードを使用し、それは働いた。今ではアプリケーションがJSONファイルを作成していますが、今ではWi-Fiの直接接続部分に行く予定です。使用しているコードやチュートリアルがあればそれを感謝します。 –

関連する問題