質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

Androidstudio Bluetooth通信について

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,540

rsy

score 10

前提・実現したいこと

AndroidStudioでAndroid同士のBluetooth通信ができるアプリを制作しています。
https://android.keicode.com/basics/bluetooth-rfcomm-socket-2.php
を参考にして制作しています。
各プログラムの一行目を自分のPC用に設定し、後はファイル名を合わせたりしていますが、
ほとんどコピー&ペーストでやっています。

サーバー側のAndroid、クライアント側のAndroid、それぞれアプリを作り、サーバー側が投げた情報をクライアント側が受け取るようにしたいのですが、Bluetooth通信がNo connectつまりつながっていないので、情報を受け取る以前の問題になってしまいます。ペアリングはしたのですが、それ以外の
原因が分かりません。

よろしくお願いいたします。

発生している問題・エラーメッセージ

特にエラーはでていません。ペアリングはしたのですが、Bluetooth通信ができていないようです。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.(名前).testcrientapplication">

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

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:configChanges="orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

MainActivity.java

package com.example.(名前).testcrientapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.TextView;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.Set;

public class MainActivity extends AppCompatActivity {

static final String TAG = "BTTEST1";
BluetoothAdapter bluetoothAdapter;

TextView btStatusTextView;
TextView tempTextView;

BTClientThread btClientThread;

final Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {

String s;

switch(msg.what){
case Constants.MESSAGE_BT:
s = (String) msg.obj;
if(s != null){
btStatusTextView.setText(s);
}
break;
case Constants.MESSAGE_TEMP:
s = (String) msg.obj;
if(s != null){
tempTextView.setText(s);
}
break;
}
}
};

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

// Find Views
btStatusTextView = (TextView) findViewById(R.id.btStatusTextView);
tempTextView = (TextView) findViewById(R.id.tempTextView);

if(savedInstanceState != null){
String temp = savedInstanceState.getString(Constants.STATE_TEMP);
tempTextView.setText(temp);
}

// Initialize Bluetooth
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if( bluetoothAdapter == null ){
Log.d(TAG, "This device doesn't support Bluetooth.");
}

}

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(Constants.STATE_TEMP, tempTextView.getText().toString());
}

public class BTClientThread extends Thread {

InputStream inputStream;
OutputStream outputStrem;
BluetoothSocket bluetoothSocket;

public void run() {

byte[] incomingBuff = new byte[64];

BluetoothDevice bluetoothDevice = null;
Set<BluetoothDevice> devices = bluetoothAdapter.getBondedDevices();
for(BluetoothDevice device : devices){
if(device.getName().equals(Constants.BT_DEVICE)) {
bluetoothDevice = device;
break;
}
}

if(bluetoothDevice == null){
Log.d(TAG, "No device found.");
return;
}

try {

bluetoothSocket = bluetoothDevice.createRfcommSocketToServiceRecord(
Constants.BT_UUID);

while(true) {

if(Thread.interrupted()){
break;
}

try {
bluetoothSocket.connect();

handler.obtainMessage(
Constants.MESSAGE_BT,
"CONNECTED " + bluetoothDevice.getName())
.sendToTarget();

inputStream = bluetoothSocket.getInputStream();
outputStrem = bluetoothSocket.getOutputStream();

while (true) {

if (Thread.interrupted()) {
break;
}

// Send Command
String command = "GET:TEMP";
outputStrem.write(command.getBytes());
// Read Response
int incomingBytes = inputStream.read(incomingBuff);
byte[] buff = new byte[incomingBytes];
System.arraycopy(incomingBuff, 0, buff, 0, incomingBytes);
String s = new String(buff, StandardCharsets.UTF_8);

// Show Result to UI
handler.obtainMessage(
Constants.MESSAGE_TEMP,
s)
.sendToTarget();

// Update again in a few seconds
Thread.sleep(3000);
}

} catch (IOException e) {
// connect will throw IOException immediately
// when it's disconnected.
Log.d(TAG, e.getMessage());
}

handler.obtainMessage(
Constants.MESSAGE_BT,
"DISCONNECTED")
.sendToTarget();

// Re-try after 3 sec
Thread.sleep(3 * 1000);
}

}catch (InterruptedException e){
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}

if(bluetoothSocket != null){
try {
bluetoothSocket.close();
} catch (IOException e) {}
bluetoothSocket = null;
}

handler.obtainMessage(
Constants.MESSAGE_BT,
"DISCONNECTED - Exit BTClientThread")
.sendToTarget();
}
}
}

Contents.java

package com.example.(名前).testcrientapplication;

import java.util.UUID;

public class Constants {

public static final String BT_DEVICE = "Nexus 7";
public static final UUID BT_UUID = UUID.fromString(
"41eb5f39-6c3a-4067-8bb9-bad64e6e0908");

public static final String STATE_TEMP = "STATE_TEMP";

public static final int MESSAGE_BT = 0;
public static final int MESSAGE_TEMP = 2;

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:id="@+id/btStatusTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Not connected" />

<TextView
android:id="@+id/tempTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="(unknown)"
android:layout_below="@id/btStatusTextView"
android:textSize="24sp"/>

</RelativeLayout>

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る