تنظیمات مکانیابی
ویرایش
۱) تعریف مجوزهای دسترسی به مکان
برای استفاده از امکانات مکانیابی چابک لازم است دو مجوز ACCESS_FINE_LOCATION
و ACCESS_COARSE_LOCATION
را در فایل AndroidManifest.xml
قرار دهید:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.adpdigital.push.demo" >
...
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application ... >
</application>
</manifest>
۲) دریافت موقعیت مکانی در حالت kill
برای دریافت گزارش موقعیت مکانی درحالت kill
لازم است یک IntentService
تعریف نمایید تا بتوانید از سرویس مکانیابی استفاده کنید.
سپس با استفاده از متد addCallbackIntent
بایستی Intent فراخوانی سرویس خود را به شیء LocationManager
معرفی کنید، مانند نمونه زیر:
Intent intent = new Intent(getContext(), LocationHostService.class);
locationManger.addCallbackIntent(intent);
پس از این کار، Intent موردنظر توسط چابک ذخیره و مورد استفاده قرار خواهد گرفت، مگراینکه با استفاده از متد removeCallbackIntent
آن را غیرفعال نمایید.
این IntentService
در هر بهروزرسانی موقعیت مکانی فراخوانی خواهد شد.
موقعیت مکانی با کلید LocationManager.LOCATION_KEY
از Intent قابل دریافت است، در متد onHandleIntent
مانند نمونه زیر میتوانید اطلاعات موقعیت مکانی بهروزشده را استخراج نمایید:
public class LocationHostService extends IntentService {
private static final String TAG = "LocationHostService";
public LocationHostService() {super("LocationHostService");}
/**
* Creates an IntentService. Invoked by your subclass's constructor.
*
* @param name Used to name the worker thread, important only for debugging.
*/
public LocationHostService(String name) {
super(name);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
if(extras != null) {
Location location = extras.getParcelable(LocationManager.LOCATION_KEY);
if(location != null) {
// use location here
}
}
}
}
کلاس سرویس تعریف شده را به فایل AndroidManifest.xml
نیز اضافه نمایید،:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.adpdigital.push.demo" >
<application
android:name=".app.DemoApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light">
...
<service android:name=".service.LocationHostService" >
</service>
</application>
</manifest>
برای غیرفعال کردن دریافت موقعیت مکانی در سرویس خود متد removeCallbackIntent
را فراخوانی کنید:
locationManger.removeCallbackIntent();