บนอุปกรณ์ที่ใช้ Android Cupcake (1.5) ฉันจะตรวจสอบและเปิดใช้งาน GPS ได้อย่างไร
บนอุปกรณ์ที่ใช้ Android Cupcake (1.5) ฉันจะตรวจสอบและเปิดใช้งาน GPS ได้อย่างไร
คำตอบ:
วิธีที่ดีที่สุดน่าจะเป็นดังต่อไปนี้:
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
สำหรับกิจกรรมทั้งหมดเพื่อให้คุณสามารถยกเลิกมันใน OnDestroy เพื่อหลีกเลี่ยงการรั่วไหลของหน่วยความจำ ( if(alert != null) { alert.dismiss(); }
)
LocationManager.NETWORK_PROVIDER
จะกลับมาจริง
ใน android เราสามารถตรวจสอบว่ามีการเปิดใช้งาน GPS ในอุปกรณ์หรือไม่โดยใช้ LocationManager
นี่เป็นโปรแกรมง่าย ๆ ในการตรวจสอบ
GPS เปิดใช้งานหรือไม่: - เพิ่มบรรทัดสิทธิ์ผู้ใช้ด้านล่างใน AndroidManifest.xml ไปยังตำแหน่งการเข้าถึง
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
ไฟล์คลาส java ของคุณควรเป็น
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(); }
)
ใช่การตั้งค่า GPS ไม่สามารถเปลี่ยนแปลงได้ในเชิงโปรแกรมอีกต่อไปเนื่องจากเป็นการตั้งค่าความเป็นส่วนตัวและเราต้องตรวจสอบว่าพวกเขาเปิดอยู่หรือไม่จากโปรแกรมและจัดการหากไม่ได้เปิดอยู่ คุณสามารถแจ้งผู้ใช้ว่า GPS ปิดอยู่และใช้สิ่งนี้เพื่อแสดงหน้าจอการตั้งค่าแก่ผู้ใช้หากคุณต้องการ
ตรวจสอบว่ามีผู้ให้บริการตำแหน่งหรือไม่
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
}
หากผู้ใช้ต้องการเปิดใช้งาน GPS คุณอาจแสดงหน้าจอการตั้งค่าด้วยวิธีนี้
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);
และใน onActivityResult คุณสามารถดูว่าผู้ใช้ได้เปิดใช้งานหรือไม่
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
กับหลาย intents ได้ เมื่อเจตนากลับสู่กิจกรรมของคุณคุณตรวจสอบ RequestCode เพื่อดูว่าเจตนาจะกลับมาและตอบสนองตามนั้น
provider
สามารถเป็นสตริงที่ว่างเปล่า ฉันต้องเปลี่ยนการตรวจสอบเป็น(provider != null && !provider.isEmpty())
นี่คือขั้นตอน:
ขั้นตอนที่ 1:สร้างบริการที่ทำงานในพื้นหลัง
ขั้นตอนที่ 2:คุณต้องได้รับอนุญาตในไฟล์ Manifest ดังต่อไปนี้:
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);
}
วิธีนี้จะใช้บริการLocationManager
ลิงค์ที่มา
//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;
};
GPS จะถูกใช้หากผู้ใช้ได้อนุญาตให้ใช้ในการตั้งค่า
คุณไม่สามารถเปิดใช้งานได้อย่างชัดเจนอีกต่อไป แต่คุณไม่จำเป็นต้อง - มันเป็นการตั้งค่าความเป็นส่วนตัวจริง ๆ ดังนั้นคุณไม่ต้องการปรับแต่งมัน หากผู้ใช้ตกลงกับแอปที่ได้รับพิกัดที่แม่นยำจะมีการเปิดใช้งาน จากนั้น API การจัดการตำแหน่งจะใช้ GPS หากทำได้
หากแอปของคุณไม่มีประโยชน์หากไม่มี GPS และปิดอยู่คุณสามารถเปิดแอปการตั้งค่าที่หน้าจอด้านขวาโดยใช้ความตั้งใจเพื่อให้ผู้ใช้สามารถเปิดใช้งานได้
รหัสนี้จะตรวจสอบสถานะ GPS
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
`
ในตัวจัดการLocationListener
การนำไปใช้onProviderEnabled
และonProviderDisabled
ตัวจัดการเหตุการณ์ เมื่อคุณโทรrequestLocationUpdates(...)
หาก GPS ถูกปิดการใช้งานในโทรศัพท์onProviderDisabled
จะถูกเรียก; หากผู้ใช้เปิดใช้งาน GPS 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()
}