2017-05-24 18 views
-1

私は自分の "BeaconManager"を作成して、さまざまなアクションをより簡単に作成しようとしています。Androidビーコン - バインド/アンバインドに関する問題(こちら)

だから私は、新しいクラスを作成しましたし、私は「BeaconConsumer」とその機能を実装しました:だからとして

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(); 
} 


} 

:これまで

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を持っています私がMainActivityコード内で使用しなければならない方法で、より簡単にdidEnterRegion/didExitRegion関数を使用しようとしています。

バインド/アンバインド(これ)はうまくコンパイルできません。消費者の権利を得ることができないため、MainActivityに "BeaconConsumer"を実装していないためです。

「原因:java.lang.NullPointerException:nullオブジェクト参照で仮想メソッド 'java.lang.String android.content.Context.getPackageName()'を呼び出そうとしました。バインドするもの。

私のビーコンマネージャーを維持する方法でこれに対処する方法はありますか?

ありがとうございます。 PS:英語が完璧でない場合は申し訳ありません

答えて

0

BeaconConsumerインターフェイスは、アクティビティまたはサービスクラスによって実装されるように設計されています。質問に示されているようにこのインタフェースを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); 
} 

あなたのコードには既にこれらのメソッドの空の実装があると思われます。そうしないとコードがコンパイルされません。上記のように完全な実装を提供していることを確認してください。

関連する問題