Làm cách nào để biết GPS của thiết bị Android có được bật không


Câu trả lời:


456

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();
}

1
Chủ yếu là về việc kích hoạt ý định xem cấu hình GPS, xem github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/ trộm để biết chi tiết.
Marcus

3
Đoạn mã đẹp. Tôi đã xóa @SuppressWarnings và không nhận được bất kỳ cảnh báo nào ... có lẽ chúng không cần thiết?
nhịp

30
Tôi sẽ khuyên bạn nên khai báo alertcho 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(); })
Cameron

Vậy nếu tôi đang sử dụng Tiết kiệm pin thì nó vẫn hoạt động chứ?
Prakhar Mohan Srivastava

3
@PrakharMohanSrivastava nếu cài đặt vị trí của bạn đang ở chế độ Tiết kiệm năng lượng, điều này sẽ trả về sai, tuy nhiên LocationManager.NETWORK_PROVIDERsẽ trả về đúng
Tim

129

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

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


1
Không có gì xảy ra khi tôi thử chức năng của bạn. Tôi không có lỗi khi tôi kiểm tra nó mặc dù.
Erik

Tôi đã làm cho nó hoạt động! :) Rất cám ơn nhưng tôi không thể bỏ phiếu cho đến khi bạn chỉnh sửa câu trả lời của mình: /
Erik

3
không có vấn đề gì @Erik Edgren bạn nhận được giải pháp nên tôi rất vui ENjoy ... !!

@ user647826: Tuyệt vời! Hoạt động độc đáo. Bạn đã cứu đêm của tôi
Addi

1
Một lời khuyên: tuyên bố alertcho 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(); })
naXa

38

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.


2
xin chào, tôi có một vấn đề tương tự ... bạn có thể giải thích ngắn gọn, "REQUEST_CODE" là gì và nó dùng để làm gì không?
poeschlorn

2
@poeschlorn Anna đăng liên kết đến chi tiết bên dưới. Nói một cách đơn giản, RequestCode cho phép bạn sử dụng startActivityForResultvớ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.
Farray

2
providerthể là một chuỗi rỗng. Tôi đã phải đổi séc thành(provider != null && !provider.isEmpty())
Pawan

Vì nhà cung cấp có thể là "", hãy xem xét sử dụng int mode = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); Nếu chế độ = 0 GPS tắt
Levon Petrosyan

31

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.


5
Nó báo rằng GPS được bật ngay cả khi đã tắt.
Ivan V

15

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);
}

9

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;
};

6

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ó.


6

Đ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();
}

`


3

Trong của bạn LocationListener, thực hiện onProviderEnabledonProviderDisabledxử lý sự kiện. Khi bạn gọi requestLocationUpdates(...), nếu GPS bị tắt trên điện thoại, onProviderDisabledsẽ được gọi; nếu người dùng kích hoạt GPS, onProviderEnabledsẽ được gọi.


2
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()
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.