我试图创建自己的“BeaconManager”来更轻松地开发不同的操作。Android Beacon - 绑定/解除绑定问题(this)
所以我创建了一个新的类,我已经实现“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:对不起,如果我的英文不完美