Có thể bật LocationProviders (Nhà cung cấp GPS/Nhà cung cấp Mạng) trên Thiết bị theo chương trình, nếu nó bị tắt?Bật Nhà cung cấp Vị trí Lập trình trong Android
Trả lời
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));
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 LocationManager và for LocationListener.
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.
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.
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
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. –
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? –
Ví dụ triển khai ở đây: http://stackoverflow.com/questions/33251373/turn-on-location-services-without-navigating-to-settings-page – MorZa
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.
- 1. Kích hoạt Nhà cung cấp Vị trí Mạng trong Trình giả lập Android?
- 2. Nhận vị trí * coarse * từ nhà cung cấp GPS trên Android
- 3. API vị trí của Android: Nhận trạng thái nhà cung cấp
- 4. Nhà cung cấp vị trí hợp nhất của Android bị mất
- 5. LocationManager: nhà cung cấp "mạng" có luôn được bật không?
- 6. Thiết lập Nhà cung cấp OAuth PHP
- 7. Bất kỳ cách nào khác để kiểm tra xem nhà cung cấp vị trí mạng có được bật không?
- 8. Quản lý vị trí cung cấp các vị trí cũ với dấu thời gian mới
- 9. java.lang.SecurityException "gps" nhà cung cấp vị trí yêu cầu sự cho phép ACCESS_FINE_LOCATION
- 10. nhà cung cấp mạng và vị trí GPS có thể hoán đổi cho nhau theo trạng thái gps android
- 11. cập nhật nhà cung cấp Android.Settings.System value
- 12. Nhà cung cấp vị trí địa lý cho Firefox cho phép nhập thủ công
- 13. Trình giả lập Android Vị trí Mac OSX
- 14. Thiết lập nhà cung cấp OpenID để thử nghiệm
- 15. Nhà cung cấp Sybase ASE ADO.net 2.0?
- 16. đăng nhập có lập trình với nhà cung cấp thành viên .net
- 17. Sử dụng GPS và Nhà cung cấp mạng cùng một lúc trong Android
- 18. Nhà cung cấp thành viên Active Directory và Nhà cung cấp hồ sơ SQL
- 19. Dừng trình nghe vị trí trong Android
- 20. Ví dụ về Nhà cung cấp nội dung và Nhà cung cấp nội dung?
- 21. Symfony2 bin/nhà cung cấp
- 22. Nhà cung cấp OpenID Connect
- 23. Nhà cung cấp MSSCCAPI Mercurial?
- 24. Truy vấn nhà cung cấp nội dung Android IN khoản
- 25. Android - nhà cung cấp nội dung sqlite và đa luồng
- 26. Nhà cung cấp OData trong Ruby/Java
- 27. Content_URI trong nhà cung cấp nội dung
- 28. onTạo Nhà cung cấp Nội dung
- 29. Nhà cung cấp nội dung riêng tư của Android?
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. –