답변:
가장 좋은 방법은 다음과 같습니다.
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
를 반환 하지만 true를 반환합니다.
Android에서는 기기에서 GPS가 사용 설정되어 있는지 LocationManager를 사용하여 쉽게 확인할 수 있습니다.
다음은 점검 할 간단한 프로그램입니다.
GPS 사용 여부 :-AndroidManifest.xml에 아래 사용자 권한 줄을 추가하여 위치에 액세스하십시오.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
자바 클래스 파일은
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
하면 여러 의도 로 사용할 수 있습니다 . 인 텐트가 활동으로 돌아 오면 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 단계 : 서비스를 지속적으로 실행하여 연결을 모니터링하십시오.
이 방법은 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를 사용하도록 허용 한 경우 GPS가 사용됩니다.
더 이상이 기능을 명시 적으로 전환 할 수는 없지만 꼭 필요한 것은 아닙니다. 개인 정보 보호 설정이므로 조정하고 싶지 않습니다. 정확한 좌표를 얻는 앱으로 사용자가 괜찮다면 켜져 있습니다. 그런 다음 위치 관리자 API는 가능한 경우 GPS를 사용합니다.
GPS없이 앱이 실제로 유용하지 않고 꺼져있는 경우 인 텐트를 사용하여 오른쪽 화면에서 설정 앱을 열어 사용자가 활성화 할 수 있습니다.
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()
}