2016-05-26 15 views
1

これは、altbeaconページのサンプルコードに従ってバックグラウンドスキャンするコードですが、これは発生しません。タグを入力しました。 RangingActivityは、問題のないBeaconConsumer範囲ビーコンを実装しています。私が見る唯一のログはバックグラウンドスキャン開始!私は最初にアプリケーションを起動します。前もって感謝します。バックグラウンドでスキャンできません

public class BackgroundScanner extends Application implements BootstrapNotifier { 
private String TAG="Background Scanner"; 
private RegionBootstrap regionBootstrap; 
private BackgroundPowerSaver backgroundPowerSaver; 
private boolean haveDetectedBeaconsSinceBoot = false; 
private RangingActivity rangingActivity; 
@Override 
public void onCreate() { 
    Log.d(TAG,"Background Scanning Initiated!"); 
    super.onCreate(); 
    BeaconManager beaconManager = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(this); 
    beaconManager.getBeaconParsers().add(new BeaconParser(). 
      setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19")); 
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT)); 
    beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT)); 

    Region region = new Region("backgroundRegion", 
      null, null, null); 
    beaconManager.setBackgroundBetweenScanPeriod(60000L); 
    try { 
     beaconManager.updateScanPeriods(); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 
    regionBootstrap = new RegionBootstrap(this, region); 
    backgroundPowerSaver = new BackgroundPowerSaver(this); 

} 

@Override 
public void didEnterRegion(Region region) { 
    Log.d(TAG, "did enter region."); 
    sendNotification(); 
} 
@SuppressLint("NewApi") 
private void sendNotification() { 
    NotificationCompat.Builder builder = 
      new NotificationCompat.Builder(this) 
        .setContentTitle("Notification!") 
        .setContentText("Beacon Nearby!") 
        .setSmallIcon(R.mipmap.ic_launcher); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
    stackBuilder.addNextIntent(new Intent(this, RangingActivity.class)); 
    PendingIntent resultPendingIntent = 
      stackBuilder.getPendingIntent(
        0, 
        PendingIntent.FLAG_UPDATE_CURRENT 
      ); 
    builder.setContentIntent(resultPendingIntent); 
    NotificationManager notificationManager = 
      (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(1, builder.build()); 
} 

@Override 
public void didExitRegion(Region region) { 

} 

@Override 
public void didDetermineStateForRegion(int i, Region region) { 

} 
+0

このようなバックグラウンドタスクは、アプリケーションではなくアンドロイドサービスに入れる方がよいでしょう。 –

+0

@PetrovDmitrii最初にやりたかったのですが、このライブラリがすでにサービスを提供していることがわかりました。 –

答えて

0

ライブラリはすでに地域内にあると考えるかもしれません。バージョン2.8から、複数のアプリケーションを再起動したときの領域の状態を追跡して、複数のdidEnterRegionコールバックを防止します。 didExitRegionコールバックが得られるまで、近くのすべてのビーコンをオフにする(またはBluetoothをオフにする)ことでこれをテストできます。その後、再度オンにして、didEnterRegionコールバックがあるかどうかを確認します。

+0

ありがとうございます。これは私が直面していた問題のようです。 –

+0

あなたはこの問題を最初に実行することはできません。これはもっと直感的な方法かもしれないと思いますか? – davidgyoung

+0

あなたはこの問題に言及したので、これはそんなに意味があります。 –

関連する問題