我想知道远程物理设备中的哪些事件在监听设备中触发ACTION_ACL_CONNECTED和ACTION_ACL_DISCONNECTED.我的测试结果毫无意义.我已经在几分之一的范围内收集了几个设备:
运行Android 3.1的Galaxy Tab P7500
运行Android 2.2的i5500手机
带有蓝牙USB加密狗的PC winXP
两个带开/关按钮的耳机
首先,我手动配对Tab中的所有设备.除了Tab之外,PC和手机都没有与任何其他设备配对.(标签永远不会以任何方式找到其中一个耳机,但可以通过手动和编程方式轻松找到它.然后我有一个简单的应用程序来启动发现,并监听和显示ACL广播.这就是发生的事情(每次都是一样的,它的疯狂一致):
在PC上启用蓝牙: - 选项卡上没有反应
首次打开耳机电源: - 选项卡上的ACTION_ACL_CONNECTED
再次打开耳机: - 选项卡上的ACTION_ACL_DISCONNECTED和ACTION_ACL_CONNECTED快速连续
禁用选项卡上的蓝牙: - 选项卡上没有反应
在选项卡上启用蓝牙: - 选项卡上的耳机ACTION_ACL_CONNECTED
来自手机的startDiscovery(): - PC是手机找到的唯一设备,虽然手机只与Tab配对,而不是与PC配对.否则,手机只会响应Tab从不作出反应的耳机.
怎么弄出这个烂摊子?即使配对并在范围内上电,也不能依赖导致ACTION_ACL_CONNECT的设备吗?
以下是BroadcastReceiver和onCreate活动的方法,但我不认为此代码中的细节很重要:
BroadcastReceiver intentReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device != null) {
name = device.getName();
Log.v(TAG, "Device=" + device.getName());
}
else {
name = "None";
} …
Run Code Online (Sandbox Code Playgroud) Eclipse中的文件资源管理器视图曾经工作过,因此当应用程序运行时,我可以在其内存中查看和管理文件.但是几天以来,文件资源管理器总是完全空的.适用于仿真器和物理设备.
有关如何使此功能再次使用的任何建议都是非常受欢迎的!
我想听一些特定的蓝牙设备的连接/断开连接,这些设备的MAC地址我知道,但不一定配对(我不想弄乱用户的配对设备列表,反之亦然).我只对发现他们的存在感兴趣,而不是与他们沟通.
这适用于我的下面的代码!但我的问题是,我无法找出哪个特定设备正在连接/断开连接,只是它发生在某人身上.我怎样才能找出行动涉及哪一个?
首先,我为我的两个特定物理蓝牙设备实例化对象,并将它们添加到我的intent过滤器:
BluetoothDevice myPinkHeadset = mBluetoothAdapter.getRemoteDevice("18:17:0C:EB:9C:81");
BluetoothDevice myPcBluetoothDongle = mBluetoothAdapter.getRemoteDevice("5A:7A:CC:4B:C5:08");
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(myPinkHeadset.ACTION_ACL_CONNECTED);
intentFilter.addAction(myPinkHeadset.ACTION_ACL_DISCONNECTED);
intentFilter.addAction(myPcBluetoothDongle.ACTION_ACL_CONNECTED);
intentFilter.addAction(myPcBluetoothDongle.ACTION_ACL_DISCONNECTED);
Run Code Online (Sandbox Code Playgroud)
然后我听他们的广播:
final BroadcastReceiver intentReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Run Code Online (Sandbox Code Playgroud)
现在我想知道哪一个已连接和/或断开连接,我不知道如何做到这一点.
1)我直接使用"BluetoothDevice".它对广播的反应很好,但它并没有告诉我这两个物理设备中的哪一个涉及行动.他们是一种找出方法吗?不允许使用Bluetooth.getName(),因为它不是静态类.
if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
}
Run Code Online (Sandbox Code Playgroud)
或2)我听两个设备的两个动作.
if (myPinkHeadset .ACTION_ACL_CONNECTED.equals(action)) {
Log.v(TAG, "Connected to myPinkHeadset ");
}
else if (myPinkHeadset .ACTION_ACL_DISCONNECTED.equals(action)) {
Log.v(TAG, "Disconnected from myPinkHeadset ");
}
else if (myPcBluetoothDongle .ACTION_ACL_CONNECTED.equals(action)) {
Log.v(TAG, "Connected to myPcBluetoothDongle ");
}
else if …
Run Code Online (Sandbox Code Playgroud) 一切正常,除了这个活动给出resultCode = -1
public class SetTimeDialog extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settimedialog);
Button bUseTime = (Button) findViewById(R.id.buttonUseTime_settime);
bUseTime.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent resultIntent = new Intent(this, SetTimeDialog.class);
setResult(Activity.RESULT_OK, resultIntent);
finish();
}
});
Run Code Online (Sandbox Code Playgroud)
它在MainActivity中从这里调用:
TableLayout timeTable = (TableLayout)findViewById(R.id.timeTable_writepos);
timeTable.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Intent settimedialogIntent = new Intent(getApplicationContext(), SetTimeDialog.class);
startActivityForResult(settimedialogIntent, SETTIMEDIALOG_REQCODE); // See onActivityResult()
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
在我的onActivityResult方法中,我现在什么都不做,只检查resultCode的值.(我已经删除了所有其他代码以找出错误).
我需要知道API 8(2.2)或2.3.3上的UUID.
据我了解文档,应该允许:
phoneDevice = blueAdapter.getRemoteDevice(phoneAddress);
ParcelUuid[] phoneUuids = phoneDevice.getUuids(); // Won't compile
Run Code Online (Sandbox Code Playgroud)
Eclipse给了我: "方法getUuids()未定义为BluetoothDevice类型." 但请参阅:http: //developer.android.com/reference/android/bluetooth/BluetoothDevice.html#getUuids()
另外,我想知道UUID是如何在ParcelUuid []中"分配"的.如果我设法到达那里,如何从parcelUuid []中检索UUID?在我看来,Android蓝牙的文档似乎很差.
真是笑话!现在我尝试从意图中得到它,但这也给出了:*"EXTRA_UUID无法解析或不是字段"*:
intent.getParcelableExtra(BluetoothDevice.EXTRA_UUID);
Run Code Online (Sandbox Code Playgroud) 如果我使用:func(1,2,3,4,5)调用matlab函数, 它可以完美地工作.
但如果我这样做: a = [1,2,3,4,5] %(a [1; 2; 3; 4; 5]给出相同的结果)
然后:
FUNC(a)中
给我:
??? 错误==> func at 11没有足够的输入参数.
func.m中的第11行是:
错误(nargchk(5,6,nargin));
我注意到这完美地运作:
FUNC(一(1),(2),(3),(4),(5))
如何使用向量'a'作为函数的参数?我有另一个函数otherfunc(b)返回一个,并希望将其输出用作这个func(otherfunc(b))的参数.
我想在构造函数中进行测试,以确定当前是否使用给定参数实例化对象是一个好主意.但是我如何中止并从构造函数向新语句返回警告?在每个"新"声明之前,调用者是否必须进行此类测试?我认为构造函数对它来说是个好地方.