前提・実現したいこと
Javaでソケットを使用し、サーバPCからデータを受け取るアプリケーションを作成しています。
ソケット接続後、ボタンを押下するとデータを受信し内部ストレージにファイルを作成するよう開発しました。
ファイル作成後、ダイアログが生成されるはずなのですが、ボタン押下で画面が固まってしまいます。
DeviceFileManagerを確認してみると、ファイルは正常に作成・データの書込が行われていました。
エラーメッセージもなく、全く原因が分からなかったため質問させていただきました。
考えられる原因、解決策を教えていただきたいです。
よろしくお願いいたします。
該当のソースコード
Java
1import androidx.appcompat.app.AlertDialog; 2import androidx.appcompat.app.AppCompatActivity; 3 4import android.bluetooth.BluetoothAdapter; 5import android.bluetooth.BluetoothDevice; 6mport android.bluetooth.BluetoothSocket; 7 8import android.content.Context; 9import android.content.DialogInterface; 10import android.content.Intent; 11import android.net.Uri; 12import android.os.Bundle; 13import android.view.View; 14import android.widget.Button; 15import android.widget.TextView; 16import android.widget.Toast; 17import android.util.Log; 18 19import java.io.InputStream; 20import java.io.BufferedWriter; 21import java.io.File; 22import java.io.IOException; 23import java.io.InputStream; 24import java.io.OutputStream; 25import java.io.OutputStreamWriter; 26import java.util.UUID; 27 28public class MainActivity extends AppCompatActivity { 29 30 private static final String TAG = "MainActivity"; 31 String fileName = "Data.json"; 32 private TextView vText; 33 Uri uri; 34 35 // Bt関連 36 private BluetoothAdapter btAdapter = null; 37 private BluetoothDevice btDevice = null; 38 private BluetoothSocket btSocket = null; 39 private String MacAddress = "**:**:**:**:**:**"; 40 private String MY_UUID = "00001101-0000-1000-8000-00805F9B34FB"; 41 42 @Override 43 protected void onCreate(Bundle savedInstanceState) { 44 super.onCreate(savedInstanceState); 45 setContentView(R.layout.activity_main); 46 47 vText = findViewById(R.id.v_text); 48 Button sttBtn = findViewById(R.id.stt_btn); 49 sttBtn.setOnClickListener(new View.OnClickListener() { 50 @Override 51 public void onClick(View view) { 52 53 if (btSocket != null) { 54 StartPick(); 55 56 } 57 58 } 59 }); 60 61 BTConnect(); 62 } 63 64 protected void BTConnect() { 65 btAdapter = BluetoothAdapter.getDefaultAdapter(); 66 67 vText.setText(MacAddress); 68 69 btDevice = btAdapter.getRemoteDevice(MacAddress); 70 71 try { 72 btSocket = btDevice.createRfcommSocketToServiceRecord(UUID.fromString(MY_UUID)); 73 } catch (IOException e) { 74 btSocket = null; 75 } 76 77 if (btSocket != null) { 78 btAdapter.cancelDiscovery(); 79 try { 80 btSocket.connect(); 81 } catch (IOException connectException) { 82 Toast.makeText(MainActivity.this, "ソケット接続に失敗しました。", Toast.LENGTH_SHORT).show(); 83 try { 84 btSocket.close(); 85 btSocket = null; 86 } catch (IOException closeException) { 87 return; 88 } 89 } 90 } 91 } 92 93 private void StartPick() { 94 try (InputStream inputStream = btSocket.getInputStream(); 95 OutputStream outputStream = 96 openFileOutput(fileName, Context.MODE_PRIVATE); 97 OutputStreamWriter outputStreamWriter = 98 new OutputStreamWriter(outputStream, "UTF-8"); 99 BufferedWriter bufferedWriter = 100 new BufferedWriter(outputStreamWriter)) { 101 102 // InputStreamのバッファを格納 103 byte[] buffer = new byte[1024]; 104 // 取得したバッファサイズを格納 105 int len; 106 107 while (true) { 108 int len = inputStream.read(buffer); 109 if (len == -1) { 110 break; 111 } 112 outputStream.write(buffer, 0, len); 113 } 114 115 String readData = outputStream.toString(); 116 if (readData.trim() != null && !readData.trim().equals("")) { 117 bufferedWriter.write(readData); 118 new AlertDialog.Builder(MainActivity.this, R.style.Theme_CustonButtonDialog) 119 .setTitle("データ取得完了") 120 .setMessage("ファイルを作成しました。") 121 .setCancelable(false) 122 .setPositiveButton("OK", new DialogInterface.OnClickListener() { 123 @Override 124 public void onClick(DialogInterface dialogInterface, int i) { 125 File file = new File(getFilesDir(), fileName); 126 uri = Uri.fromFile(file); 127 Intent uriIntent = new Intent(getApplicationContext(), 128 NextActivity.class); 129 uriIntent.putExtra("Uri", uri); 130 startActivity(uriIntent); 131 } 132 }) 133 .show(); 134 } 135 136 } catch (IOException e) { 137 e.printStackTrace(); 138 } 139 try { 140 btSocket.close(); 141 } catch (IOException e) { 142 e.printStackTrace(); 143 } 144 } 145 146 @Override 147 protected void onDestroy() { 148 super.onDestroy(); 149 if (btSocket != null) { 150 try { 151 btSocket.connect(); 152 } catch (IOException connectException) { 153 /*ignore*/ 154 } 155 btSocket = null; 156 } 157 } 158}
補足情報(FW/ツールのバージョンなど)
AndroidStudio 4.0.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/17 06:15