我正在尝试创建自己的“BeaconManager”来更轻松地开发不同的动作。
所以我创建了一个新类,我实现了“BeaconConsumer”及其功能:
public class MybeaconManager implements BeaconConsumer{
private BeaconManager beaconManager;
private final String TAG = "MybeaconManager";
private boolean mEnterArea = false;
private boolean mAlreadyArea = false;
public MybeaconManager(Context ctx){
beaconManager = BeaconManager.getInstanceForApplication(ctx);
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.bind(this);
}
public void bindBeacon(BeaconConsumer consumer){
beaconManager.bind(consumer);
}
public void unBindBeacon(BeaconConsumer consumer){
beaconManager.unbind(consumer);
}
public boolean isEnterInArea() {
return mEnterArea;
}
public boolean isAlreadyInArea() {
return mAlreadyArea;
}
public void sendNotification(String Notif) {
}
@Override
public void onBeaconServiceConnect() {
beaconManager.addMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
mEnterArea = true;
}
@Override
public void didExitRegion(Region region) {
mEnterArea = false;
}
@Override
public void didDetermineStateForRegion(int i, Region region) {
}
});
}
接下来,我有了我的MainActivity:
public class MainActivity extends Activity {
MybeaconManager mybeaconManager;
BeaconManager beaconManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mybeaconManager = new MybeaconManager(this);
if (mybeaconManager.isEnterInArea()){
Log.i("BeaconTest", "I'm detecting a Beacon");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mybeaconManager.unBindBeacon((BeaconConsumer) this);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onStop() {
super.onStop();
}
}
正如您所看到的,我正在尝试更加轻松地使用函数didEnterRegion / didExitRegion,我只需要在MainActivity代码中在线使用。
问题是,bind / unbind(this)编译得不好而且我认为这是因为我没有在MainActivity上实现“BeaconConsumer”,因为他无法让消费者获得正确的权利。
它告诉我:“引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'java.lang.String android.content.Context.getPackageName()'并返回绑定事情。
那么你对我如何以一种保持我的beaconManager的方式处理这个问题有任何想法吗?
提前谢谢你。 PS:对不起,如果我的英语不完美
答案 0 :(得分:2)
BeaconConsumer接口旨在由Activity或Service类实现。如果要在问题中显示的POJO中实现此接口,则需要链接下面显示的方法定义。
@Override
public Context getApplicationContext() {
return getActivity().getApplicationContext();
}
@Override
public void unbindService(ServiceConnection serviceConnection) {
getActivity().unbindService(serviceConnection);
}
@Override
public boolean bindService(Intent intent, ServiceConnection serviceConnection, int i) {
return getActivity().bindService(intent, serviceConnection, i);
}
我怀疑你的代码已经有了这些方法的空实现,否则你的代码就无法编译。确保您已提供如上所示的完整实现。