2016-05-24 4 views
1

これは私の最初のビーコンでアプリケーションを作る試みです。私はAltBeaconライブラリを使っています。私が今思うのは、ビーコンからUUIDを受信できることだけです。 この目的のために、私はAltbeaconの例に従いたいと思っていました。Altbeacon Exampleの動作方法

https://altbeacon.github.io/android-beacon-library/samples.html

だから私はやった、これは私のコードです。

public class MenuActivity extends AppCompatActivity implements View.OnClickListener, BeaconConsumer { 

    protected final String TAG = "BeaconSearch"; 
    private BeaconManager beaconManager; 
    private Region region = new Region("myUniqueRegion", null,null,null); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_menu); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this); 
     beaconManager.getBeaconParsers().add(new BeaconParser(). 
       setBeaconLayout("m:2-3=02150215,i:4-19,i:20-21,i:22-23,p:24-24")); 
     beaconManager.bind(this); 


     Button scanButton = (Button) findViewById(R.id.scan_btn); 
     scanButton.setOnClickListener(this); 

    } 


    @Override 
    public void onClick(View v) { 
     switch (v.getId()){ 
      case R.id.scan_btn: 
       onBeaconServiceConnect(); 
       break; 
     } 
    } 

    @Override 
    public void onDestroy(){ 
     super.onDestroy(); 
     beaconManager.unbind(this); 
    } 

    @Override 
    public void onBeaconServiceConnect() { 
     Log.i(TAG,"1"); 
     beaconManager.setRangeNotifier(new RangeNotifier() { 
      @Override 
      public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 
       Log.i(TAG, "2"); 
       if (beacons.size() > 0) { 
        Log.i(TAG, "Im Interested in this Beacon: " + beacons.iterator().next().getId1()); 
       } 
      } 
     }); 

     try { 
      Log.i(TAG,"3"); 
      beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null)); 
     } catch (RemoteException e) { 
      Log.i(TAG,"4"); 
     } 
    } 
} 

私の理解では、近くにビーコンからUUIDが来るはずです。しかし、どこでonBeaconServiceConnect()メソッドを呼び出さなければならないのか分かりません。私はボタンクリックでもOnCreate()メソッドで試しましたが、いずれかの方法でアプリがクラッシュしました。

私は本当に私が間違っていることと私がここで理解していないことを知りたいです。どんな助けにも感謝しています!

答えて

0

いくつかのヒント:

  1. あなたはonBeaconServiceConnect()メソッドを呼び出すことはありません - あなたがいない場合は、それがbind()

  2. への呼び出しの結果として、オペレーティングシステムによって自動的に呼び出されますこの呼び出しが自動的に行われることを確認するには、アプリでマニフェストマージが有効になっていることを確認します(Eclipseを使用している場合)。それ以外の場合は、マニフェストに適切なサービス宣言がありません。詳細は、hereを参照してください。

  3. BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);beaconManager = BeaconManager.getInstanceForApplication(this);に変更してください。それ以外の場合は、クラス変数を初期化しません。

+0

ありがとうございました!私はアンドロイドスタジオを使用しています。 Manifest.xmlで何かを変更する必要がありますか? – MassaTime

+0

Log.i(TAG; "1")の後でまだクラッシュしていますが、どのようなアイデアですか?この例では、org.altbeacon:android-beacon-library:2+をコンパイルするのではなく、このコンパイルプロジェクト( ':android-beacon-library-2.8.1')をグラブの依存関係に入れています。しかし、私がそれを変更すると、グラデルビルドが失敗します。 – MassaTime

+0

ちょうど私のヒント#3を見てください。 – davidgyoung