0

dot42 コメントを読み、Java の例をトローリングした後、Bluetooth 接続をセットアップすることはできましたが、接続を開くことができませんでした。問題を特定できません。ドキュメントを順を追って説明しました。

私のターゲット デバイスは、2.3 Gingerbread で動作する HTC Explorer です。これが私のコードです。

//Target 2.3 (Gingerbread)
[assembly: Application("dot42Application1")]

[assembly: UsesPermission(Android.Manifest.Permission.BLUETOOTH)]
[assembly: UsesPermission(Android.Manifest.Permission.BLUETOOTH_ADMIN)]

namespace dot42Application1
{
    [Activity]
    public class MainActivity : Activity
    {

        private TextView txStatus;

        protected override void OnCreate(Bundle savedInstance)
        {
            base.OnCreate(savedInstance);
            SetContentView(R.Layouts.MainLayout);

            // Find UI controls
            txStatus = FindViewById<TextView>(R.Ids.txStatus);

            Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 

            var bt = BluetoothAdapter.GetDefaultAdapter();

            if (bt != null) //If device has not Bluetooth this will be null
            {
                if (bt.IsEnabled()) //Is Bluetooth device enabled?
                {
                    var BT_My_Addr = bt.Address; //Get the devices MAC
                    var BT_Bonded = bt.GetBondedDevices().ToList(); //Get a list of bonded devices- I bonded to a BT2TTL Board earlier.

                    txStatus.Text = BT_My_Addr + System.Environment.NewLine; //Shows my MAC on screen.

                    string BT_Remote_Address = string.Empty;
                    foreach (var BTDevice in BT_Bonded) //Just searchging for string in bonded list
                    {
                        if (BTDevice.Name.Contains("linvor"))  
                        {
                            BT_Remote_Address = BTDevice.Address;
                        }
                    }

                    //Gets remote device
                    var BT_Remote_Device = bt.GetRemoteDevice(BT_Remote_Address);

                    //Create a RFCOMM Socket to remote device using popular UUID ofr BT Serial boards
                    var BTsocket = BT_Remote_Device.CreateInsecureRfcommSocketToServiceRecord(Java.Util.UUID.FromString("00001101-0000-1000-8000-00805F9B34FB"));

                    //Call anyway to make sure there is no discvoerry in the backgorund. It slows stuff down.
                    bt.CancelDiscovery(); 

                    //Exception here? Dont know why :(
                    BTsocket.Connect();

                    //Suppsoed to dump 0 to 99999 to my listening serial device but I never get this far.
                    var BT_Out = BTsocket.GetOutputStream();
                    for (int i = 0; i < 99999; i++)
                    {
                        BT_Out.Write(Encoding.ASCII.GetBytes(i.ToString()));

                    }


                }
                else
                {
                    txStatus.Text = "Bluetooth is disabled :(";
                }

            }
        }
    }

そして、これはソケットの作成後に表示されるものです

ここに画像の説明を入力

そしてエラー...

ここに画像の説明を入力

私は何を間違っていますか?:(

4

1 に答える 1

1

インターネット上のさまざまなコード スニペットを分析して、問題を解決したようです。問題は、メソッドですべてを実行しようとしたことだと思いますOnCreate。私が従った手順は次のとおりです。

  • メイン ビュー (MainActivity.xml) にボタンを作成し、onClick メソッドを追加しました。

ここに画像の説明を入力

  • すべてのコードをOnCreateメソッドの外に移動しました。(これにより、アプリケーションを完全に初期化できると思います。) 2 つのメソッドを持つボタンのイベント ハンドラーを作成しました。

ここに画像の説明を入力

  • 2 つの方法は、元の質問で投稿したコードと同じです。ユーザーがボタンをクリックすると、それらが分離されて呼び出されるだけです。
    • findBT()デフォルトのアダプタを取得します。インテント フィルタを実行しない場合、Bluetooth が有効かどうかを確認します。または、結合されたリストを循環し、デバイス名を照合して、BluetoohDevice を変数に格納します。これは、私のコードとは異なるもう 1 つのことです。GetRemoteDevice は使用せず、デバイスを BondedList からグローバル変数に割り当てるだけです。

ここに画像の説明を入力

ここに画像の説明を入力

  • openBT()RFCOMM ソケットを作成します (これは unsecure では機能しませんでした - 例外がスローされましたが、secure メソッドを使用すると機能しました!)

ここに画像の説明を入力

Android の Bluetooth コントロール パネルを使用して、リモート デバイスとペアリングする必要があります。このコードは、ペアリングされていないデバイスをスキャンまたは接続しません。null 例外をスローするだけです。

また、ターゲット SDK 2.3.x を残しましたが、4.x API を使用しています。

-開示。私はベテランの Android 開発者ではなく、Android コンテキストでの Java アプリケーションのライフサイクルについて学んでいるだけです。これが、同じことをしようとしている他の C# 開発者に役立つことを願っています。

于 2013-09-13T18:53:16.063 に答える