2012-01-24 64 views

Trả lời

20

Không, nó không phải là, nhưng bạn có thể mở các thiết lập Dịch vụ định vị cửa sổ:

context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 
-1

Sử dụng đoạn mã sau để bắt đầu GPS

locationManager = (LocationManager) getSystemService (Context.LOCATION_SERVICE); 
locationListener = new LocationListener(); 
locationManager.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

và đoạn mã sau để ngăn chặn GPS

locationManager.removeUpdates(locationListener); 

Để biết thêm chi tiết, xem documentations for LocationManagerfor LocationListener.

+1

tôi đang nói về việc bật (Cài đặt -> Vị trí & Bảo mật -> Sử dụng mạng không dây/Sử dụng vệ tinh GPS) tùy chọn thiết bị Android theo chương trình. –

2
private void turnGPSOn(){ 
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 

if(!provider.contains("gps")){ //if gps is disabled 
    final Intent poke = new Intent(); 
    poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
    poke.addCategory(Intent.CATEGORY_ALTERNATIVE); 
    poke.setData(Uri.parse("3")); 
    sendBroadcast(poke); 
} 
} 

Nhưng sự ủng hộ này mã chỉ tối đa apk 8.

1

Có, nhưng bạn cần phải là một Super User (sudo), thiết bị của bạn phải được root.

6

Việc kích hoạt Location với chế độ chính xác cao hoặc Tiết kiệm pin mà không cần người dùng truy cập Cài đặt

http://android-developers.blogspot.in/2015/03/google-play-services-70-places-everyone.html

+1

Kể từ Dịch vụ của Google Play 7.0, đây phải là câu trả lời được chấp nhận. Bạn CÓ THỂ có cài đặt cập nhật ứng dụng mà không cần thoát ứng dụng. Xem liên kết ở trên. –

+2

Liên kết không nói nhiều về triển khai, tôi có bỏ sót điều gì không? –

+0

Ví dụ triển khai ở đây: http://stackoverflow.com/questions/33251373/turn-on-location-services-without-navigating-to-settings-page – MorZa

0

Với bản cập nhật Marshmallow gần đây, ngay cả khi các thiết lập vị trí được bật, ứng dụng của bạn sẽ yêu cầu để hỏi rõ ràng cho sự cho phép. Cách được khuyến nghị để làm điều này là hiển thị phần Quyền của ứng dụng của bạn trong đó người dùng có thể chuyển đổi quyền theo yêu cầu. Đoạn mã để làm điều này là như sau:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  
    if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  
     final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Location Permission"); 
     builder.setMessage("The app needs location permissions. Please grant this permission to continue using the features of the app."); 
     builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 
       requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
  
      } 
     }); 
     builder.setNegativeButton(android.R.string.no, null); 
     builder.show(); 
    } 
} else { 
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    boolean isGpsProviderEnabled, isNetworkProviderEnabled; 
    isGpsProviderEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    isNetworkProviderEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

    if(!isGpsProviderEnabled && !isNetworkProviderEnabled) { 
     final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Location Permission"); 
     builder.setMessage("The app needs location permissions. Please grant this permission to continue using the features of the app."); 
     builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 
       Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       startActivity(intent); 
      } 
     }); 
     builder.setNegativeButton(android.R.string.no, null); 
     builder.show(); 
    } 
} 

Và ghi đè onRequestPermissionsResult phương pháp như sau:

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case PERMISSION_REQUEST_COARSE_LOCATION: { 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Log.d(TAG, "coarse location permission granted"); 
      } else { 
       Intent intent = new Intent(); 
       intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); 
       Uri uri = Uri.fromParts("package", getPackageName(), null); 
       intent.setData(uri); 
       startActivity(intent); 
      } 
     } 
    } 
} 

Một cách khác là bạn cũng có thể sử dụng SettingsApi để hỏi mà nhà cung cấp vị trí (s) là đã bật. Nếu không có tính năng nào được bật, bạn có thể nhắc hộp thoại thay đổi cài đặt từ bên trong ứng dụng.

Các vấn đề liên quan