Android & Bluetooth(その1)
さて、今回は自己満足の自作アプリをBluetoothで制御しようとしハマッたお話です。
大概記事書くときはハマッたお話ばかりです・・・。
まずはこちらの音楽再生アプリは、実はBluetoothガン無視で作ったからBluetoothで音楽聞くとすごい使いづらい・・・。
まぁなんとか音量変更だけは使えるんだけどね。
他のボタンを押すとなぜか他のアプリが自動起動して、邪魔をする・・・。
たとえば再生を押したら別アプリが再生始めて音楽がカオスに
とりあえず環境
- OS:Android 2.3.7 & 4.1.2
- Bluetooth端末:SONY DRC-BTN40
- アプリ:PL PLAYER v1.0.1
Bluetooth端末
PL PLAYER
https://play.google.com/store/apps/details?id=com.seiglab.PLPlayer
そろそろBluetoothやっちゃう?って事でさっそくハマッた
まぁ感じとしては、Bluetoothとつながったら適当なクラスでボタン情報を取得してサクサクっと終了だと思っていたんだけど、悪魔が潜んでいた!
それらしいクラス(BluetoothAdapter)を探して、かくかくしかじか。
とりあえずリスナー設定して接続を取得しようかな。
public class AaaActivity extends Activity {
 BluetoothA2dp bluetoothA2dp;
 public void onCreate(Bundle bundle) {
  super.onCreate(bundle);
  BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  BluetoothProfile.ServiceListener profileListener = new BluetoothProfile.ServiceListener() {
   public void onServiceConnected(int profile, BluetoothProfile proxy) {
    if (profile == BluetoothProfile.A2DP) {
     // A2dpが検出された
     bluetoothA2dp = (BluetoothA2dp) proxy;
    }
   }
   public void onServiceDisconnected(int profile) {
    if (profile == BluetoothProfile.A2DP) {
     // A2dpが切断された
     bluetoothA2dp = null;
    }
   }
  };
  // デフォルトアダプタからA2dpデバイスへの接続権を取得する
  bluetoothAdapter.getProfileProxy(this, profileListener, BluetoothProfile.A2DP);
 }
}
さて、実行っと。
あれ?BluetoothProfile.A2DPが「Field requires API level 11 (current min is 10): android.bluetooth.BluetoothProfile#A2DP」になってるじゃねえかぁあああ!
つまりAndroid2.3.7では使えないのね・・・。
次の手としてペアリング情報回りで役に立つものないか手探り。 特にリスナー系はない模様。とりあえず、役に立たないかもだけどペアリング情報取得情報をカキコ。
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
for (BluetoothDevice device : pairedDevices) {
 BluetoothClass bluetoothClass = device.getBluetoothClass();
 device.getName(); ・・・デバイス名
 bluetoothClass.getDeviceClass(); ・・・デバイスクラス
 bluetoothClass.hasService(Service.AUDIO)); ・・・サービスの確認
}
いろいろ検索しているとBluetoothChat関連のコピペが大量に結果に出て来る。googleさん、いい加減にコピペサイトは削除してくんねえかい?
そんなこんなでUUIDで送信端末と受信端末を接続するんだけど、SPPのUUIDばっかり検索で引っかかりやがる・・・。A2DPの情報があまりにも少なすぎると疑問に思いつつ検索で拾ったUUIDでひたすら接続にチャレンジ。
以下、受信側のソース。
public class Test extends Thread {
 private BluetoothServerSocket bluetoothServerSocket;
 private BluetoothSocket bluetoothSocket;
 private InputStream inputStream;
 private static final String NAME = “tekitou”;
 private static final UUID MYID = UUID.fromString(“UUIDを記入”);
 public Test(BluetoothAdapter bluetoothAdapter) {
  try {
   bluetoothServerSocket = bluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME, MYID);
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 public void run() {
  try {
   bluetoothSocket = bluetoothServerSocket.accept();
   inputStream = bluetoothSocket.getInputStream();
   Log.d(“debug”, String.valueOf(inputStream.read()));
  } catch (IOException e) {
   e.printStackTrace();
   return;
  }
 }
}
以下、activity。
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
Test test = new Test(bluetoothAdapter);
test.start();
結果は、Bluetoothのどのボタンを押しても反応ナッシング!
結構、お手上げ状態で次回はごにょごにょして逆コンパイルへ・・・。
メイン広告
関連記事
-  
                              
- 
              Android開発環境の導入(その1)自宅資料の中から使いそうなやつを抜粋。 何回かに分けて公開しよう。 
-  
                              
- 
              AndroidManifest.xmlのandroid:launchModeについて今回は、AndroidManifest.xmlのandroid:launchModeについてなんだか 
-  
                              
- 
              androidをスリープ状態にしたくない!今回はandroid開発ネタで。動画や音楽再生には必須といえる「スリープ状態にしない」とい対応につい 
-  
                              
- 
              Android開発環境の導入(その2) – JDKのインストール前回は全体の流れを書いたけど、今回からは具体的な内容へ! まずは「JDKのインスト 
-  
                              
- 
              端末の電池の残量をアクティビティに渡したいアプリを作成している時に、端末の電池の残量を取得したい事があると思います。仕組みは電池の残量を管理す 
-  
                              
- 
              Android & Bluetooth(その2)前回は、AndroidアプリをBluetoothで制御するのにお手上げ状態でした。今回は、他のBlu 
横長広告
- PREV
- CentOSのHDMIで音声がでない
- NEXT
- Android & Bluetooth(その2)
 パーソナルラボラトリー
パーソナルラボラトリー        
 
         
        