2016-11-11 13 views
0

Я использую библиотеку сигналов Alt beacon для сканирования маяка. Я сканирую маяк в классе service.i, чтобы продолжать сканировать маяк, даже приложение закрыто. Но если закрыть службу приложения является купирован и маяк не scanning.I пытался, но я не getting.please помочь мне и спасибо
// MainActivityКак отправить данные из службы даже закрыть приложение

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
setContentView(R.layout.activity_main); 

    Intent intent = new Intent(MainActivity.this, ScaningService.class); 
    startService(intent);//starting service 
    getApplicationContext().bindService(intent, mConnection, Context.BIND_AUTO_CREATE);//bounding service 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

} 

private ServiceConnection mConnection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName className, 
            IBinder service) {   


    } 

    @Override 
    public void onServiceDisconnected(ComponentName arg0) { 


    } 
}; 

// класс обслуживания

public class ScaningService extends Service implements BeaconConsumer { 
public BeaconManager beaconManager; 
public MainActivity activity; 

private final IBinder mBinder = new SimpleServiceBinder(); 


public class SimpleServiceBinder extends Binder { 
    public ScaningService getService() { 
     return ScaningService.this; 
    } 
} 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return mBinder; 
} 


@Override 
public void onCreate() { 
    super.onCreate(); 
    handler = new Handler(); 
    beaconManager = BeaconManager.getInstanceForApplication(getBaseContext()); 
    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.setBackgroundMode(true); 
    beaconManager.setBackgroundScanPeriod(1100);//this will set how long a bluetooth should scan 
    beaconManager.setBackgroundBetweenScanPeriod(2000);//this will set bluetooth scanning interval   
    beaconManager.bind(ScaningService.this); 

} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    return START_STICKY; 
} 

@Override 
public boolean onUnbind(Intent intent) { 
    return super.onUnbind(intent); 
} 

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

@Override 
public void onBeaconServiceConnect() { 

    beaconManager.setRangeNotifier(new RangeNotifier() { 
     @Override 
     public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 

      if (beacons.size() > 0) { 

       beacon = beacons.iterator().next(); 
       Log.e(TAG, " UUID: " + beacon.getId1());// this is not showing and i tried toast also     
     } 
    }); 

    try {   

     beaconManager.startRangingBeaconsInRegion(new Region("sBeacon", null, null, null));    

    } catch (RemoteException e) { 
     Log.i(TAG, "RemoteException: " + e); 
    } 
} 

}

+0

Использование фона 'Сервис' –

+0

[Документация библиотеки] (https://altbeacon.github.io/android-beacon-library/documentation.html) также рассказывает об операции фона. –

+0

Пожалуйста, отредактируйте ваш вопрос, чтобы показать [что вы пробовали до сих пор] (http://whathaveyoutried.com). Вы должны включить [mcve] кода, с которым у вас возникают проблемы, тогда мы можем попытаться помочь с конкретной проблемой. Вы также должны прочитать [ask]. –

ответ

1

Да, это возможно. При правильной настройке Android Beacon Library возобновит сканирование в фоновом режиме в течение пяти минут после того, как ваше приложение будет убито. В ранговых обратных вызовах вы можете отправлять данные на свой сервер с результатами сканирования, хотя вам, вероятно, нужно сделать это в новой цепочке (используя Handler или аналогичную конструкцию.)

Примеры на веб-сайте проекта выше должен получить от вас большую часть пути. Вы захотите объединить запуск фона и диапазон в пользовательском классе Application.

EDIT: После просмотра прочитанного кода ясно, что проблема заключается в том, что сканирование запускается из пользовательской службы. Хотя это может сработать, гораздо труднее заставить его работать правильно, поэтому при перезапуске приложения сканирование возобновляется. Гораздо проще следовать примерам, которые используют RegionBootstrap для запуска фоновых обнаружений с использованием настраиваемого класса Application.