当前位置: 首页 > 知识库问答 >
问题:

如何使用ALT beacon根据距离在回收器视图中显示检测到的信标

经骁
2023-03-14

嗨,我正在使用ALT beacon库开发一个android应用程序。我需要根据距离在回收器视图中显示检测到的信标。附近的距离信标需要显示在列表的第一位。我做了每一件事,但我得到了空白页。信标未显示在recyclerview中。请帮帮我。

ArrayList<Beacon> data;
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    recyclerView = findViewById(R.id.Recyclerview_tab);
    bt_stop =  findViewById(R.id.bt_stop);
    bt_start =  findViewById(R.id.bt_start);

    beaconManager = BeaconManager.getInstanceForApplication(this);

    beaconManager.getBeaconParsers().add(new BeaconParser()
            .setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));

    beaconManager.setBackgroundBetweenScanPeriod(30000l);
    beaconManager.setForegroundBetweenScanPeriod(10000l);
    region = new Region("myMonitoringUniqueId", null, null, null);

适配器=新Beaconadapter(此);回收视图。设置适配器(适配器);

    bt_start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            beaconManager.bind(Main2Activity.this);
            Toast.makeText(Main2Activity.this, "clicked", Toast.LENGTH_SHORT).show();

        }
    });
    bt_stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            beaconManager.unbind(Main2Activity.this);

        }
    });
}

@Override
public void onBeaconServiceConnect() {

    final Region region = new Region("myBeaons", Identifier.parse("e2c56db5-dffb-48d2-b060-d0f5a71096e0"), null, null);

    beaconManager.addMonitorNotifier(new MonitorNotifier() {
                                         @Override
                                         public void didEnterRegion(Region region) {
                                             try {
                                                 Log.d(TAG, "didEnterRegion");
                                                 beaconManager.startRangingBeaconsInRegion(region);
                                             } catch (RemoteException e) {
                                                 e.printStackTrace();
                                             }
                                         }

                                         @Override
                                         public void didExitRegion(Region region) {
                                             try {
                                                 Log.d(TAG, "didExitRegion");
                                                 beaconManager.stopRangingBeaconsInRegion(region);
                                             } catch (RemoteException e) {
                                                 e.printStackTrace();
                                             }
                                         }

                                         @Override
                                         public void didDetermineStateForRegion(int i, Region region) {

                                         }
                                     });

        beaconManager.addRangeNotifier(new RangeNotifier() {
            @Override
            public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
                if (beacons.size() > 0) {

适配器。initAll(信标);

日志i(TAG),“我看到的第一个信标是关于”beacons.iterator()。next()。getDistance()“米远。”);}适配器。notifyDataSetChanged();

            }
        });

        try {
            beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
        } catch (RemoteException e) {    }


}

我的适配器代码:

public class Beaconadapter extends RecyclerView.Adapter<Beaconadapter.Myviewholder> {
Context mcontext;

public static  ArrayList<Beacon> beacons;

private LayoutInflater inflater;


public Beaconadapter(Context mcontext) {
    this.mcontext = mcontext;
    this.beacons = new ArrayList<Beacon>();
    this.inflater = LayoutInflater.from(mcontext);


}

@NonNull
@Override
public Myviewholder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View v= LayoutInflater.from(mcontext).inflate(R.layout.beaconrecyclerview,viewGroup,false);
    Myviewholder myviewholder=new Myviewholder(v);
    return myviewholder;    }

@Override
public void onBindViewHolder(@NonNull Myviewholder myviewholder, int i) {
    myviewholder.tv_uuid.setText(beacons.get(i).getServiceUuid());
    myviewholder.tv_macid2.setText(beacons.get(i).getBluetoothAddress());
    myviewholder.tv_rssi2.setText((int) beacons.get(i).getDistance());

}

@Override
public int getItemCount() {
    return beacons.size();
}

公共无效initAll(集合新信标){

    this.beacons.clear();
    this.beacons.addAll(newBeacons);


}

公共静态类Myviewholder扩展了RecyclerView。视窗持有人{TextView tv_uuid、tv_macid2、tv_rssi2;

    public Myviewholder(@NonNull View itemView) {
        super(itemView);

        this.tv_uuid=itemView.findViewById(R.id.tv_uuid);
        this.tv_macid2=itemView.findViewById(R.id.tv_macid2);
        this.tv_rssi2=itemView.findViewById(R.id.tv_rssi2);


    }
}

}

共有1个答案

柯昆杰
2023-03-14

以下是一些提示:

>

将调试行添加到每个回调方法的顶部。然后运行您的代码来确定哪些方法被调用:onBeaconServiceConnectdidentZonedid确定mineStateForZonedidRangeBeaconsInZone调用

如果事件链中的一个方法没有被调用,请尝试找出原因。每次你得到一个回调工作,重复上面的步骤2。这是调试程序的可靠方法。

 类似资料:
  • 我正试图添加数据在我的回收视图从火炉。我有带名字的文件(级别级别编号)但没有显示我的活动这是代码: 主要活动水平: 公共类级别活动扩展AppCompat活动{ } 水平调整器 公共类级别适配器扩展了RecyclerView。适配器 }

  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我

  • 当我尝试将Image URL解析到ImageView中时,回收器视图不显示,活动为空。我正在使用Picasso将图像加载到适配器类中的onBinfViewHolder方法中。这是相关代码 代表: } RepRvAdapter: } 解析JSON数据的方法: 现在,我有一行解析图像URL的代码被注释掉了。行取消注释后,活动将不再显示。如何获取要在ImageView中解析和显示的图像url?我认为这可

  • 这是我的活动 这是我的回收器适配器 logcat 这里,我从以前的活动回收器视图中获取值,并且我试图在此活动中通过Bundle显示它。 问题是,当我用这种方法执行操作时,活动没有显示任何东西,而我在我的Bundle中获取值,我没有获取它是什么问题。如有任何帮助,将不胜感激。谢谢你

  • 我在机器人中有一个回收站视图。我已向其附加了。我只启用了从左向右滑动。 因此,当我在Recycle视图中滑动任何项目时,该项目开始向右移动,在左侧我绘制一个文本。这很好。我的要求是,我只允许用户滑动一定距离,当达到该距离并且用户释放触摸时,被滑动的项目应该回到其向左的位置。 问题是,当我从左向右滑动时,视图会被完全从屏幕上刷掉。我如何才能将其限制为仅在一定距离内滑动?我该怎么做? 以下是我的物品触

  • 我试图显示图像从Firebase数据库中的回收视图在Android Studio,但图像不显示。我不确定我哪里出错了,也不知道问题出在哪里。 主Activity.xml 标志和物品。xml 标志tems.java 主要活动。JAVA LogoItemsAdapter。JAVA