Câu trả lời:
Cách tốt nhất có vẻ như sau:
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
cho toàn bộ hoạt động để bạn có thể loại bỏ nó trong onDestroy để tránh rò rỉ bộ nhớ ( if(alert != null) { alert.dismiss(); }
)
LocationManager.NETWORK_PROVIDER
sẽ trả về đúng
Trong Android, chúng ta có thể dễ dàng kiểm tra xem GPS có được bật trong thiết bị hay không bằng LocationManager.
Đây là một chương trình đơn giản để kiểm tra.
GPS có bật hay không: - Thêm dòng quyền người dùng bên dưới trong AndroidManifest.xml vào Vị trí truy cập
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Tệp lớp java của bạn phải là
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();
}
}
Đầu ra sẽ như thế nào
alert
cho toàn bộ hoạt động để bạn có thể loại bỏ nó onDestroy()
để tránh rò rỉ bộ nhớ ( if(alert != null) { alert.dismiss(); }
)
có, cài đặt GPS không thể được thay đổi theo chương trình nữa vì chúng là cài đặt quyền riêng tư và chúng tôi phải kiểm tra xem chúng có được bật hay không từ chương trình và xử lý nếu chúng không được bật. bạn có thể thông báo cho người dùng rằng GPS bị tắt và sử dụng một cái gì đó như thế này để hiển thị màn hình cài đặt cho người dùng nếu bạn muốn.
Kiểm tra nếu nhà cung cấp vị trí có sẵn
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
}
Nếu người dùng muốn bật GPS, bạn có thể hiển thị màn hình cài đặt theo cách này.
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);
Và trong onActivityResult của bạn, bạn có thể xem liệu người dùng đã kích hoạt nó hay chưa
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
}
}
}
Đó là một cách để làm điều đó và tôi hy vọng nó sẽ giúp. Hãy cho tôi biết nếu tôi đang làm bất cứ điều gì sai.
startActivityForResult
với nhiều ý định. Khi ý định trở lại hoạt động của bạn, bạn kiểm tra RequestCode để xem ý định nào đang quay trở lại và phản hồi tương ứng.
provider
thể là một chuỗi rỗng. Tôi đã phải đổi séc thành(provider != null && !provider.isEmpty())
Dưới đây là các bước:
Bước 1: Tạo các dịch vụ chạy trong nền.
Bước 2: Bạn cũng yêu cầu sự cho phép trong tệp Manifest:
android.permission.ACCESS_FINE_LOCATION
Bước 3: Viết mã:
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();
Bước 4: Hoặc đơn giản là bạn có thể kiểm tra bằng cách sử dụng:
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
Bước 5: Chạy dịch vụ của bạn liên tục để theo dõi kết nối.
Có bạn có thể kiểm tra bên dưới là mã:
public boolean isGPSEnabled (Context mContext){
LocationManager locationManager = (LocationManager)
mContext.getSystemService(Context.LOCATION_SERVICE);
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
Phương pháp này sẽ sử dụng dịch vụ LocationManager .
Liên kết nguồn
//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 sẽ được sử dụng nếu người dùng đã cho phép sử dụng nó trong cài đặt của nó.
Bạn không thể bật cái này một cách rõ ràng nữa, nhưng bạn không phải - đó thực sự là một thiết lập quyền riêng tư, vì vậy bạn không muốn điều chỉnh nó. Nếu người dùng ổn với các ứng dụng có tọa độ chính xác thì nó sẽ được bật. Sau đó, API quản lý vị trí sẽ sử dụng GPS nếu có thể.
Nếu ứng dụng của bạn thực sự không hữu ích nếu không có GPS và tắt, bạn có thể mở ứng dụng cài đặt ở màn hình bên phải bằng cách sử dụng ý định để người dùng có thể kích hoạt nó.
Đoạn mã này kiểm tra trạng thái GPS
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
`
Trong của bạn LocationListener
, thực hiện onProviderEnabled
và onProviderDisabled
xử lý sự kiện. Khi bạn gọi requestLocationUpdates(...)
, nếu GPS bị tắt trên điện thoại, onProviderDisabled
sẽ được gọi; nếu người dùng kích hoạt GPS, onProviderEnabled
sẽ được gọi.
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()
}