0

BLE サンプルをダウンロードしましたが、コードを編集したいと考えています。

コードに Edittext を追加して、元のコードの文字列「Praveen」の代わりに数字を送信しましたが、Galaxy S4 は現在アプリを開くことさえできません。アプリは変更なしで正常に動作します。

これが私がコードに加えた変更です。コメント行は元のコードからのもので、そのすぐ下の行は私が行った変更です。

前もって感謝します

public static EditText Oe;

//public static String dummyName = "Praveen";
  public static String str = Oe.getText().toString();

public void sendAlert(BluetoothDevice device) {
    Log.d(TAG, "sendAlert");
    byte[] value = null;
    byte cat = (byte) callCategory;
    byte cnt = (byte) dummyCount;

    try {
       // String s = dummyName;
        String s = str;
        value = s.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    byte[] attVal = new byte[value.length + 2];

    attVal[0] = cat;
    attVal[1] = cnt;
    for (int i = 0; i < value.length; i++)
        attVal[i + 2] = value[i];

    mNewAlert.setValue(attVal);
    mBluetoothGattServer.notifyCharacteristicChanged(device, mNewAlert, false);

}

Edittext の xml

 <EditText
    android:id="@+id/Oe"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:text="@string/Oe"/>

OnCreate で Edittext を定義しました

public void onCreate() {

    Log.d(TAG, "onCreate() called");
    if (mBtAdapter == null) {
        mBtAdapter = BluetoothAdapter.getDefaultAdapter();
        if (mBtAdapter == null) {
            Log.i(TAG, "adapter is null");
            return;
        }
    }

    if (mBluetoothGattServer == null) {
        Log.i(TAG, "mBluetoothGattServer::null");
        Log.i(TAG, "getting proxy::");
        BluetoothGattAdapter.getProfileProxy(this, mProfileServiceListener,      BluetoothGattAdapter.GATT_SERVER);
    }

    mSMSMMSObserver = new BluetoothSMSMMSContentObserver();
    mCallObserver = new CallContentObserver();
    getContentResolver().registerContentObserver(Uri.parse("content://mms-sms"), true, mSMSMMSObserver);
    getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, mCallObserver);

    Oe = (EditText)findViewById(R.id.Oe);
}

主な活動部分

public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btn_select:
        if (!mBluetoothAdapter.isEnabled()) {
            Log.i(TAG, "onClick - BT not enabled yet");
            Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableIntent, REQUEST_ENABLE_BT);

              case R.id.button_send_alert:
                Log.e("MainActivity", "Clicked");
                if (mService != null)
                    mService.sendAlert(mDevice);
4

2 に答える 2

0

だから、ここにあなたの問題があります..

編集テキストを参照していません。これが問題ですが、あなたが言った特定のポイントで参照を行うことができません。

実際、すべてが非効率的に書かれています。基本的にやりたいことは、onclick() メソッドで編集テキストから文字列を取得することです。

here を参照してください。sendAlert() メソッドを呼び出す onclick メソッドの場合は、これを読みながら変更してください。

case R.id.button_send_alert:
       Log.e("MainActivity", "Clicked");
       if (mService != null)
          mService.sendAlert(mDevice);   

1. mService 変数が null かどうかを確認する if メソッドで、編集テキストを宣言し、それを参照します。

EditText Oe = (EditText)findViewById(R.id.name);

2. ここで、最後の行を次のように変更します。

mService.sendAlert(mDevice , Oe.getText().toString());

3. あと少しです。sendalert メソッドにパラメーターが 1 つしか含まれていないため、ここでエラーが発生します。

sendAlert メソッドを次のように変更します。

public void sendAlert(BluetoothDevice device , String s) {
Log.d(TAG, "sendAlert");
byte[] value = null;
byte cat = (byte) callCategory;
byte cnt = (byte) dummyCount;

try {
   // Using the string that's passed to it.
    value = s.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
byte[] attVal = new byte[value.length + 2];

attVal[0] = cat;
attVal[1] = cnt;
for (int i = 0; i < value.length; i++)
    attVal[i + 2] = value[i];

mNewAlert.setValue(attVal);
mBluetoothGattServer.notifyCharacteristicChanged(device, mNewAlert, false);

}

すべてが計画どおりに進むはずです..後で役立つように、変更に注意してください。あなたのコードを知ってください。

于 2015-02-06T13:56:22.657 に答える
0

間違いは、どのEditTextテキストを取得する必要があるかを定義していないようです。あなたEditTextが次のようになっているとします:

<EditText 
    android:id="@+id/name" />

そこからテキストを取得する場合は、次のように取得します。

public static EditText Oe;
Oe = (EditText)findViewById(R.id.name); //You are missing this one. It defines which EditText you wish to refer to.
public static String str = Oe.getText().toString();

他にコメントしてください。詳細については、この回答をチェックアウトすることもできます。

于 2013-05-03T23:58:08.023 に答える