我已下载了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);
答案 0 :(得分: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();
希望它有所帮助,请评论。您还可以查看this答案以获取更多信息。
答案 1 :(得分:0)
所以,这是你的问题..
你没有引用你的编辑文本,这是问题所在,但是你不能在你说的特定点上进行引用。
实际上,整个事情都是无效的。基本上你想要做的是从onclick()方法的编辑文本中获取字符串。
请参阅此处,在您调用sendAlert()方法的onclick方法中,在阅读时修改它。
case R.id.button_send_alert:
Log.e("MainActivity", "Clicked");
if (mService != null)
mService.sendAlert(mDevice);
<强> 1。在if方法中,检查mService变量是否为null,声明编辑文本,引用它。
EditText Oe = (EditText)findViewById(R.id.name);
<强> 2。现在,将最后一行更改为。
mService.sendAlert(mDevice , Oe.getText().toString());
第3。你几乎就在那里,因为你的sendalert方法只包含一个参数,你会遇到错误。
修改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);
}
一切都应该按计划进行..请务必注意以后会有所帮助的更改。了解你的代码。