小编Kik*_*iki的帖子

Android蓝牙低功耗:characteristic.getPermissions()返回0?

我正在编写一个Android BLE应用程序,我正在尝试获得某个特性的权限.我已经设法使用characteristic.getProperties()获取特性属性,并返回非零值,但是,当我使用getPermission()方法时,它返回0,即使我确定该特性具有PERMISSION_WRITE_ENCRYPTED_MITM(0x00000040) ).

这是一段代码片段

    // properties
    int properties = ch.getProperties();
    DebugWrapper.infoMsg("properties: " + properties, TAG); //returns non-zero value

    // permissions      
    int permissions = ch.getPermissions();  
    DebugWrapper.infoMsg("permissions: " + permissions, TAG); //returns zero value
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?有没有特定的方法来获得特性的权限或这是Android api的问题?

我正在使用API​​ 19并在Samsung Galaxy Note 3上测试我的程序.

我感谢任何帮助.

java android bluetooth bluetooth-lowenergy android-bluetooth

7
推荐指数
1
解决办法
3066
查看次数

能够在RecyclerView中同时单击两个项目

我在RecyclerView中有一个项目列表,我在onBindViewHolder中为每个视图设置了onClickListener.点击监听器工作正常,问题是我可以同时点击列表中的两个项目,它们都将运行他们的onClick方法.如果你有ListViews,如果你试图同时点击两个项目,它不允许你.

例如:
假设您已经触摸列表视图中的某个项目,并且在此期间您尝试触摸另一个项目,它将不会让您.Recyclerview允许这样做.

如何点击时,我们如何使RecyclerView像ListView一样工作?

以下是我的实施

public class DataCardAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context mContext;
    private ArrayList<Data> mDatas = new ArrayList<>();
    private Data mData;

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View card = LayoutInflater.from(mContext).inflate(R.layout.card, parent, false);
        return  new DataCardViewHolder(mContext, card, mData);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        Data data = mDatas.get(position);
        ((DataCardViewHolder )holder).configureDataCard(data);
    }

    public static class DataCardViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        private Context mContext;
        private Data mData;

        public DataCardViewHolder(Context context, View view, Data data) { …
Run Code Online (Sandbox Code Playgroud)

java android listview android-recyclerview

7
推荐指数
1
解决办法
2141
查看次数

蓝牙 (BLE) bluetoothLeAdvertiser.startAdvertising 抛出错误代码 2 (ADVERTISE_FAILED_TOO_MANY_ADVERTISERS)

我有一台支持 BLE 广告的三星 SM-G950F ,但在播放了一些广告后,它开始抛出错误代码 2 (ADVERTISE_FAILED_TOO_MANY_ADVERTISERS),其中 Android 文档显示“无法启动广告,因为没有可用的广告实例”。而让它再次工作一段时间的唯一方法就是重新启动设备。另一种设备 HTC 10 也有类似的问题,它一开始工作得很好,最终慢慢地每 10 或 20 次传输中丢失 1 次,但很快就会降级到每 50 次发送 1 次。最后,设备需要重新启动使应用程序再次运行。

我的用例如下:

  1. 调用 bluetoothLeAdvertiser.startAdvertising(...)
  2. 每 300 毫秒调用该方法大约 100 次(在某个点之前工作正常)
  3. 然后在某一时刻 AdvertiseCallback onStartFailure(int errorCode) 开始被调用并返回错误代码 2
  4. 重新启动手机(关闭蓝牙并返回或关闭应用程序无法解决问题)
  5. 重复这个过程

这是三星 S8 设备特有的问题还是我的实施方式有问题?有没有办法以编程方式清除/重置广告商?

此外,如果您知道任何其他设备存在类似问题,最好能分享一下以帮助其他人了解它们。

注意: 相同的代码在运行 android 6.0.1 的 Samsung S5 SM-G900F 上运行良好

代码片段

public void startAdvertising() {
    // making sure that the advertiser object was initialised, it is null if the user opened the app
    // without having …
Run Code Online (Sandbox Code Playgroud)

java android samsung-mobile bluetooth-lowenergy samsung-galaxy

5
推荐指数
1
解决办法
2045
查看次数