অ্যান্ড্রয়েড এপিআই স্তর (23) সহ, আমাদের অনুমতিগুলি পরীক্ষা করতে হবে।
https://developer.android.com/training/permission/requesting.html
আমার আপনার একই সমস্যা ছিল, তবে নিম্নলিখিতগুলি আমার পক্ষে কাজ করেছিল এবং আমি অবস্থান ডেটা সফলভাবে পুনরুদ্ধার করতে সক্ষম হয়েছি:
(1) আপনার ম্যানিফেস্টে আপনার অনুমতি তালিকাভুক্ত রয়েছে তা নিশ্চিত করুন:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
(২) আপনি ব্যবহারকারীর কাছ থেকে অনুমতি চেয়েছেন তা নিশ্চিত করুন:
if ( ContextCompat.checkSelfPermission( this, android.Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED ) {
ActivityCompat.requestPermissions( this, new String[] { android.Manifest.permission.ACCESS_COARSE_LOCATION },
LocationService.MY_PERMISSION_ACCESS_COURSE_LOCATION );
}
(3) নিশ্চিত করুন যে আপনি কনটেক্সট কমপ্যাট ব্যবহার করেছেন কারণ এটির পুরানো এপিআই স্তরের সাথে সামঞ্জস্য রয়েছে।
(৪) আপনার অবস্থান পরিষেবাতে বা ক্লাসে যা আপনার লোকেশনম্যানেজারটি আরম্ভ করে এবং সর্বশেষ পরিচিত স্থানটি পায়, আমাদের অনুমতিগুলি পরীক্ষা করতে হবে:
if ( Build.VERSION.SDK_INT >= 23 &&
ContextCompat.checkSelfPermission( context, android.Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission( context, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return ;
}
(5) আমি @TargetApi (23) কে আমার initLocationService পদ্ধতির শীর্ষে অন্তর্ভুক্ত করার পরে এই পদ্ধতিটি কেবল আমার পক্ষে কাজ করেছে।
()) আমি এটিকে আমার গ্রেড বিল্ডে যুক্ত করেছি:
compile 'com.android.support:support-v4:23.0.1'
এখানে রেফারেন্সের জন্য আমার অবস্থানসেবা:
public class LocationService implements LocationListener {
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 0;
private static final long MIN_TIME_BW_UPDATES = 0;
private final static boolean forceNetwork = false;
private static LocationService instance = null;
private LocationManager locationManager;
public Location location;
public double longitude;
public double latitude;
public static LocationService getLocationManager(Context context) {
if (instance == null) {
instance = new LocationService(context);
}
return instance;
}
private LocationService( Context context ) {
initLocationService(context);
LogService.log("LocationService created");
}
@TargetApi(23)
private void initLocationService(Context context) {
if ( Build.VERSION.SDK_INT >= 23 &&
ContextCompat.checkSelfPermission( context, android.Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission( context, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return ;
}
try {
this.longitude = 0.0;
this.latitude = 0.0;
this.locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
this.isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
this.isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (forceNetwork) isGPSEnabled = false;
if (!isNetworkEnabled && !isGPSEnabled) {
this.locationServiceAvailable = false;
}
{
this.locationServiceAvailable = true;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
updateCoordinates();
}
}
if (isGPSEnabled) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
updateCoordinates();
}
}
}
} catch (Exception ex) {
LogService.log( "Error creating location service: " + ex.getMessage() );
}
}
@Override
public void onLocationChanged(Location location) {
}
}
আমি এ পর্যন্ত কেবল একটি অ্যান্ড্রয়েড ললিপপ ডিভাইস দিয়ে পরীক্ষা করেছি। আশা করি এটি আপনার পক্ষে কাজ করে।