Java 列出在ListView中找到的信标
我试图在Android中制作一个简单的应用程序,通过使用AltBeacon库显示ListView中找到的所有信标。我遇到的问题是,没有显示任何信标,我一直得到一个没有任何信标的空白屏幕 你知道我的代码有什么问题吗? 这是我的代码: MainActivity.java:Java 列出在ListView中找到的信标,java,android,altbeacon,Java,Android,Altbeacon,我试图在Android中制作一个简单的应用程序,通过使用AltBeacon库显示ListView中找到的所有信标。我遇到的问题是,没有显示任何信标,我一直得到一个没有任何信标的空白屏幕 你知道我的代码有什么问题吗? 这是我的代码: MainActivity.java: public class MainActivity extends Activity implements BeaconConsumer, RangeNotifier { public BeaconManager
public class MainActivity extends Activity implements BeaconConsumer, RangeNotifier {
public BeaconManager mBeaconManager;
public List<Beacon> beaconlijst;
ListView lijst;
public BeaconListAdapter listAdapter;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
beaconlijst = new ArrayList<>();
lijst = (ListView)findViewById(R.id.listViews);
listAdapter = new BeaconListAdapter(this, beaconlijst);
lijst.setAdapter(listAdapter);
mBeaconManager = BeaconManager.getInstanceForApplication(this.getApplicationContext());
mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19"));
mBeaconManager.bind(this);
}
@Override
public void onBeaconServiceConnect() {
Region region = new Region("all-beacons-region", null, null, null);
try {
mBeaconManager.startRangingBeaconsInRegion(region);
}catch(RemoteException e) {
e.printStackTrace();
}
mBeaconManager.setRangeNotifier(this);
}
@Override
public void didRangeBeaconsInRegion(final Collection<Beacon> beacons, Region region) {
runOnUiThread(new Runnable() {
@Override
public void run() {
beaconlijst = new ArrayList<>(beacons);
listAdapter.notifyDataSetChanged();
}
});
}
public void onPause() {
super.onPause();
mBeaconManager.unbind(this);
}
}
public类MainActivity扩展活动实现BeaconConsumer、RangeNotifier{
公共信标管理器;公共信标管理器;
公共列表beaconlijst;
ListView-lijst;
公共信标列表适配器;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
beaconlijst=newarraylist();
lijst=(ListView)findViewById(R.id.ListView);
listAdapter=新的BeaconListAdapter(此为beaconlijst);
lijst.setAdapter(listAdapter);
mBeaconManager=BeaconManager.getInstanceForApplication(this.getApplicationContext());
mBeaconManager.getBeaconParsers().add(新的BeaconParser().setBeaconLayout(“s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19”);
mBeaconManager.bind(这个);
}
@凌驾
beacerviceconnect()上的公共无效{
区域区域=新区域(“所有信标区域”,null,null,null);
试一试{
MBeaconsistenregion(区域)Startrangbeaconregion经理;
}捕获(远程异常){
e、 printStackTrace();
}
mBeaconManager.setRangeNotifier(此);
}
@凌驾
公共无效范围信标区域(最终收集信标,区域){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
信标列表=新阵列列表(信标);
listAdapter.notifyDataSetChanged();
}
});
}
公共无效暂停(){
super.onPause();
mBeaconManager.unbind(此);
}
}
BeaconListAdapter.java:
public class BeaconListAdapter extends BaseAdapter {
private Activity activity;
private List<Beacon> beacons;
private static LayoutInflater inflater = null;
public BeaconListAdapter(Activity _activity, List<Beacon> _beacons) {
this.activity = _activity;
this.beacons = _beacons;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return beacons.size();
}
@Override
public Object getItem(int position) {
return beacons.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if(convertView == null ) {
view = inflater.inflate(R.layout.tupple_monitoring, null);
}
TextView uuid = (TextView)view.findViewById(R.id.BEACON_uuid);
TextView rssi = (TextView)view.findViewById(R.id.BEACON_rssi);
TextView txpower = (TextView)view.findViewById(R.id.BEACON_txpower);
Beacon beacon = beacons.get(position);
if(beacon != null) {
uuid.setText(beacon.getId2().toString());
rssi.setText(beacon.getRssi());
txpower.setText(beacon.getTxPower());
}
return view;
}
}
公共类BeaconListAdapter扩展了BaseAdapter{
私人活动;
私人名单信标;
专用静态充气机=空;
公共信标列表适配器(活动\活动,列表\信标){
this.activity=\u activity;
this.beacons=_beacons;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
}
@凌驾
public int getCount(){
返回信标。size();
}
@凌驾
公共对象getItem(int位置){
返回信标。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
if(convertView==null){
视图=充气机。充气(R.layout.tupple_监控,空);
}
TextView uuid=(TextView)view.findViewById(R.id.BEACON\u uuid);
TextView rssi=(TextView)view.findViewById(R.id.BEACON\u rssi);
TextView txpower=(TextView)view.findViewById(R.id.BEACON\u txpower);
信标=信标。获取(位置);
如果(信标!=null){
uuid.setText(beacon.getId2().toString());
setText(beacon.getRssi());
setText(beacon.getxpower());
}
返回视图;
}
}
任何帮助都将不胜感激。bl low需要识别信标,您的设备是否具备检测信标的能力?是的,因此这不是问题所在。只是在这个应用程序中,它不想检测它们。那么您是否也像在示例代码中那样做了?清单和所有是的,我已经将altbeacon库包含在depenciesmanifest权限中??