Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android信标-绑定/取消绑定问题(此)_Java_Android_Ibeacon_Ibeacon Android_Beacon - Fatal编程技术网

Java Android信标-绑定/取消绑定问题(此)

Java Android信标-绑定/取消绑定问题(此),java,android,ibeacon,ibeacon-android,beacon,Java,Android,Ibeacon,Ibeacon Android,Beacon,我正在尝试创建自己的BeaconManager,以便更轻松地制定不同的行动 因此,我创建了一个新类,并实现了BeaconConsumer及其函数: public class MybeaconManager implements BeaconConsumer{ private BeaconManager beaconManager; private final String TAG = "MybeaconManager"; private boolean mEnterArea = false;

我正在尝试创建自己的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) {

        }
    });


}
除此之外,我还有我的主要活动:

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/unbindthis编译得不好,我认为这是因为我没有在main活动上实现beaconsumer,因为他无法正确地获得消费者

它告诉我:由以下原因引起:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String android.content.Context.getPackageName”,并在绑定时返回我

那么,你有什么想法可以让我保持我的beaconManager来处理这个问题吗

先谢谢你。
PS:抱歉,如果我的英语不完美

Beaconsumer接口是由活动或服务类实现的。如果您想在问题中所示的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);
}
我怀疑您的代码已经有这些方法的空实现,否则您的代码将无法编译。确保您提供了如上所示的完整实现