উত্তর:
সেরা উপায় নিম্নলিখিত বলে মনে হচ্ছে:
final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
private void buildAlertMessageNoGps() {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
dialog.cancel();
}
});
final AlertDialog alert = builder.create();
alert.show();
}
alert
পুরো ক্রিয়াকলাপের জন্য ঘোষণা করার পরামর্শ দেব যাতে আপনি এটি মেমরির ফাঁস এড়াতে অনডেট্রয়ে এটিকে বরখাস্ত করতে পারেন ( if(alert != null) { alert.dismiss(); }
)
LocationManager.NETWORK_PROVIDER
হবে , তবে সত্যই ফিরে আসবে
অ্যান্ড্রয়েডে, আমরা সহজেই ডিভাইসে জিপিএস সক্ষম কিনা তা লোকেশনম্যানেজারটি ব্যবহার করা যায় না তা সহজেই পরীক্ষা করতে পারি।
এখানে যাচাই করার জন্য একটি সহজ প্রোগ্রাম।
জিপিএস সক্ষম বা না: - অবস্থান অ্যাক্সেস করতে AndroidManifest.xML এ নীচের ব্যবহারকারীর অনুমতি লাইন যুক্ত করুন
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
আপনার জাভা ক্লাস ফাইল হওয়া উচিত
public class ExampleApp extends Activity {
/** Called when the activity is first created. */
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
Toast.makeText(this, "GPS is Enabled in your devide", Toast.LENGTH_SHORT).show();
}else{
showGPSDisabledAlertToUser();
}
}
private void showGPSDisabledAlertToUser(){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?")
.setCancelable(false)
.setPositiveButton("Goto Settings Page To Enable GPS",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
Intent callGPSSettingIntent = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(callGPSSettingIntent);
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
AlertDialog alert = alertDialogBuilder.create();
alert.show();
}
}
আউটপুট মত দেখাচ্ছে
alert
পুরো ক্রিয়াকলাপের জন্য ঘোষণা করুন যাতে onDestroy()
মেমরি ফাঁস ( if(alert != null) { alert.dismiss(); }
)) এড়াতে আপনি এটিকে বরখাস্ত করতে পারেন
হ্যাঁ জিপিএস সেটিংসে প্রাইভেসি সেটিংস হওয়ায় আর কোনও প্রোগ্রামক্রমে তা পরিবর্তন করা যায় না এবং সেগুলি প্রোগ্রাম থেকে স্যুইচ করা আছে কি না তা আমাদের পরীক্ষা করে দেখতে হবে এবং সেগুলি চালু না থাকলে এটি পরিচালনা করতে হবে। আপনি ব্যবহারকারীকে জানিয়ে দিতে পারেন যে জিপিএস বন্ধ রয়েছে এবং আপনি চাইলে সেটিংসের স্ক্রীনটি ব্যবহার করতে এই জাতীয় কিছু ব্যবহার করুন।
অবস্থান সরবরাহকারী উপলব্ধ কিনা তা পরীক্ষা করে দেখুন
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(provider != null){
Log.v(TAG, " Location providers: "+provider);
//Start searching for location and update the location text when update available
startFetchingLocation();
}else{
// Notify users and show settings if they want to enable GPS
}
যদি ব্যবহারকারী জিপিএস সক্ষম করতে চান আপনি এইভাবে সেটিংসের স্ক্রিনটি প্রদর্শন করতে পারেন।
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);
এবং আপনার অনঅ্যাক্টিভিটি রেজাল্টে আপনি দেখতে পাবেন যে ব্যবহারকারী এটি সক্ষম করেছে কিনা
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == REQUEST_CODE && resultCode == 0){
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(provider != null){
Log.v(TAG, " Location providers: "+provider);
//Start searching for location and update the location text when update available.
// Do whatever you want
startFetchingLocation();
}else{
//Users did not switch on the GPS
}
}
}
এটি করার একটি উপায় রয়েছে এবং আমি আশা করি এটি সাহায্য করবে। আমি কোনও ভুল করছি কিনা তা আমাকে জানান।
startActivityForResult
একাধিক উদ্দেশ্য সহ ব্যবহার করতে দেয় use অভিপ্রায়গুলি যখন আপনার ক্রিয়াকলাপে ফিরে আসে, আপনি কোন উদ্দেশ্যটি ফিরে আসছে তা দেখার জন্য আপনি অনুরোধকোডটি পরীক্ষা করে দেখুন এবং সেই অনুসারে প্রতিক্রিয়া জানান।
provider
একটি খালি স্ট্রিং হতে পারে। আমাকে চেকটি পরিবর্তন করতে হয়েছিল(provider != null && !provider.isEmpty())
পদক্ষেপগুলি এখানে:
পদক্ষেপ 1: পটভূমিতে চলমান পরিষেবাগুলি তৈরি করুন।
পদক্ষেপ 2: আপনারও ম্যানিফেস্ট ফাইলে নিম্নলিখিত অনুমতি প্রয়োজন:
android.permission.ACCESS_FINE_LOCATION
পদক্ষেপ 3: কোড লিখুন:
final LocationManager manager = (LocationManager)context.getSystemService (Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) )
Toast.makeText(context, "GPS is disabled!", Toast.LENGTH_LONG).show();
else
Toast.makeText(context, "GPS is enabled!", Toast.LENGTH_LONG).show();
পদক্ষেপ 4: বা কেবল আপনি ব্যবহার করে পরীক্ষা করতে পারেন:
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
পদক্ষেপ 5: সংযোগ নিরীক্ষণ করতে আপনার পরিষেবা অবিচ্ছিন্নভাবে চালান।
হ্যাঁ আপনি নীচের কোডটি যাচাই করতে পারেন:
public boolean isGPSEnabled (Context mContext){
LocationManager locationManager = (LocationManager)
mContext.getSystemService(Context.LOCATION_SERVICE);
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
এই পদ্ধতিটি লোকেশনম্যানেজার পরিষেবাটি ব্যবহার করবে ।
উত্স লিঙ্ক
//Check GPS Status true/false
public static boolean checkGPSStatus(Context context){
LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
return statusOfGPS;
};
জিপিএস ব্যবহার করা হবে যদি ব্যবহারকারী তার সেটিংসে এটি ব্যবহারের অনুমতি দেয়।
আপনি স্পষ্টভাবে এটিকে আর চালু করতে পারবেন না, তবে আপনার দরকার নেই - এটি একটি গোপনীয়তার সেটিংস সত্যই তাই আপনি এটি টুইট করতে চান না। ব্যবহারকারীরা যদি ঠিকঠাক সমন্বয় পেতে অ্যাপগুলিতে ঠিক থাকে তবে তা চালু থাকবে। তারপরে লোকেশন ম্যানেজার এপিআই এটি পারলে জিপিএস ব্যবহার করবে।
যদি আপনার অ্যাপ্লিকেশনটি জিপিএস ব্যতীত কার্যকর না হয় এবং এটি বন্ধ হয় তবে আপনি কোনও উদ্দেশ্য ব্যবহার করে ডান স্ক্রিনে সেটিংস অ্যাপটি খুলতে পারেন যাতে ব্যবহারকারী এটি সক্ষম করতে পারে।
এই টুকরো কোডটি জিপিএস স্থিতি পরীক্ষা করে
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
`
আপনার মধ্যে LocationListener
, বাস্তবায়ন onProviderEnabled
এবং onProviderDisabled
ইভেন্ট হ্যান্ডলার। আপনি যখন কল করবেন তখন requestLocationUpdates(...)
ফোনে জিপিএস অক্ষম থাকলে, কল করা onProviderDisabled
হবে; যদি ব্যবহারকারী জিপিএস সক্ষম করে, onProviderEnabled
তাকে ডাকা হবে।
In Kotlin: - How to check GPS is enable or not
val manager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
checkGPSEnable()
}
private fun checkGPSEnable() {
val dialogBuilder = AlertDialog.Builder(this)
dialogBuilder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
.setCancelable(false)
.setPositiveButton("Yes", DialogInterface.OnClickListener { dialog, id
->
startActivity(Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS))
})
.setNegativeButton("No", DialogInterface.OnClickListener { dialog, id ->
dialog.cancel()
})
val alert = dialogBuilder.create()
alert.show()
}