нужно проверить, включен ли gps или нет - PullRequest
0 голосов
/ 08 июля 2019

Я делаю приложение, в котором при нажатии кнопки оно переходит от 1 действия ко 2-му действию, для которого мне нужно, чтобы gps было активным, я использовал окно alerttdialog, чтобы включить gps, нажав на настройки, которые откроются для настройки и если я включаю его, диалоговое окно disapper и gps начинает работать, но если я нажимаю кнопку «назад», не включая gps, он работает и запускается активность, я хочу проверить, включен ли gps, если нет, то не должно отображаться второе действие

Нет ошибки. При повторном нажатии нажмите на настройку, не включив ее, она начнет работу без ошибок, но GPS все еще выключен.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main3);
    textView1 = (TextView) findViewById(R.id.location_view);
    button1 = (Button) findViewById(R.id.camera);
    button2 = (Button) findViewById(R.id.upload);
    editText1 = (EditText) findViewById(R.id.remarks);
    imageView11 = (ImageView) findViewById(R.id.image1);
    button1.setOnClickListener(this);
    button2.setOnClickListener(this);


    locationText = (TextView) findViewById(R.id.location_view);
    if (ContextCompat.checkSelfPermission(getApplicationContext(),
            android.Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED && ActivityCompat
            .checkSelfPermission(getApplicationContext(),
                    android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission
                .ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION}, 101);
    }

    getLocation();
}



public void getLocation() {
    try {
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 5, (LocationListener) this);
    } catch (SecurityException e) {
        e.printStackTrace();
    }
}

@Override
public void onBackPressed() {
    super.onBackPressed();
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()){
        case R.id.item1:
            Toast.makeText(getApplicationContext(),"Account Clicked",Toast.LENGTH_SHORT).show();
            return true;
         case R.id.item2:
            Toast.makeText(getApplicationContext(),"Account Clicked",Toast.LENGTH_SHORT).show();
            return true;
         case R.id.item3:

             AlertDialog.Builder alerDialogbuilder = new AlertDialog.Builder(Main3Activity.this);
             alerDialogbuilder.setTitle("Confirm Logout");
             alerDialogbuilder.setIcon(R.drawable.ic_error_black_24dp);
             alerDialogbuilder.setMessage("Are You Sure You Want to Logout ");
             alerDialogbuilder.setMessage("Logingout will need id password again");
             alerDialogbuilder.setCancelable(false);
             alerDialogbuilder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
                 @Override
                 public void onClick(DialogInterface dialogInterface, int i) {
                     Intent intents = new Intent(Main3Activity.this,MainActivity.class);
                     startActivity(intents);
                     Toast.makeText(getApplicationContext(),"Successfull Logout",Toast.LENGTH_SHORT).show();
                                         }
             });
             alerDialogbuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                 @Override
                 public void onClick(DialogInterface dialogInterface, int i) {
                     Toast.makeText(getApplicationContext(),"Logout Canceled",Toast.LENGTH_SHORT).show();
                 }
             });
             AlertDialog alertDialog = alerDialogbuilder.create();
             alertDialog.show();


            return true;
           default:return super.onOptionsItemSelected(item);
    }
    }

private void camera(){
    Intent intents = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intents,CAMERA_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode==CAMERA_REQUEST&&resultCode== Activity.RESULT_OK){
        Bitmap photo= (Bitmap)data.getExtras().get("data");
        imageView11.setImageBitmap(photo);

    }
}

private void upload(){
    AlertDialog.Builder alerDialogbuilder = new AlertDialog.Builder(Main3Activity.this);
    alerDialogbuilder.setTitle("Confirm Upload ?");
    alerDialogbuilder.setIcon(R.drawable.ic_error_black_24dp);
    alerDialogbuilder.setMessage("Are You Sure You Want to Upload Data");
    alerDialogbuilder.setCancelable(false);
    alerDialogbuilder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
          Toast.makeText(getApplicationContext(),"File Uploading...",Toast.LENGTH_SHORT).show();
        }
    });
    alerDialogbuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            Toast.makeText(getApplicationContext(),"Recheck Data",Toast.LENGTH_SHORT).show();
        }
    });
    AlertDialog alertDialog = alerDialogbuilder.create();
    alertDialog.show();
}

@Override
public void onClick(View view) {

    if(view==button1){
        camera();
    }

    else if (view == button2){
        upload();
    }

}


@Override
public void onLocationChanged(Location location) {

    double lati = location.getLatitude();
    double longi = location.getLongitude();

    locationText.setText("Latitude: " + lati + "\n Longitude: " + longi);

}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {

    Toast.makeText(this, "Please Enable GPS and Internet", Toast.LENGTH_SHORT).show();
    }

@Override
public void onProviderEnabled(String s) {

}

@Override
public void onProviderDisabled(String s) {
    AlertDialog.Builder alerDialogbuilder = new AlertDialog.Builder(Main3Activity.this);
    alerDialogbuilder.setTitle("Enable Gps to Continue");
    alerDialogbuilder.setIcon(R.drawable.ic_error_black_24dp);
    alerDialogbuilder.setMessage("If You Want To Enable Gps Go To Settings");
    alerDialogbuilder.setCancelable(false);
    alerDialogbuilder.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            Intent intent1 = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(intent1);
            Toast.makeText(getApplicationContext(),"Enable Gps..",Toast.LENGTH_SHORT).show();
        }
    });
    alerDialogbuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            finish();
            Toast.makeText(getApplicationContext(),"Uploading Failed,Enable Gps",Toast.LENGTH_SHORT).show();
        }
    });
    AlertDialog alertDialog = alerDialogbuilder.create();
    alertDialog.show();
    }
  }

Я хочу проверять, только включен ли gps или нет, когда моя активность начинается, если он не включен, перейдите в настройки, и все же, если пользователь не активирует настройку gps, он не должен работать, пожалуйста, помогите мне стать новым для android

Ответы [ 3 ]

1 голос
/ 08 июля 2019

Реализуйте ниже метод проверки статуса -:

public boolean CheckGpsStatus() {

         LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

         boolean GpsStatus = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

            return GpsStatus;
        }
0 голосов
/ 08 июля 2019
        public class MainActivity extends AppCompatActivity
                implements NavigationView.OnNavigationItemSelectedListener ,OnMapReadyCallback,LocationListener{

     protected static final String TAG = "MainActivity";
        protected static final int REQUEST_CHECK_SETTINGS = 0x1;

        Marker mCurrLocationMarker;
        GoogleMap mgooglemap;
        private LocationManager locationManager;


@Override
    public void onLocationChanged(Location location) {

        if (mCurrLocationMarker != null) {
            mCurrLocationMarker.remove();
        }

        //Place current location marker
        LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
      //  MarkerOptions markerOptions = new MarkerOptions();
      //  markerOptions.position(latLng);
      //  markerOptions.title("Current Position");
       // markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
      // mCurrLocationMarker = mgooglemap.addMarker(markerOptions);


        //move map camera
        mgooglemap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,16));
mgooglemap.getMaxZoomLevel();
      //  locationManager.removeUpdates(this);
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {
        Toast.makeText(MainActivity.this, "Please Enable GPS", Toast.LENGTH_LONG).show();

//for you want to open Settings screen
while(!onProviderEnabled())
{
    startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);
}

    }

onProviderDisabled () приведенного выше кода предоставит вам необходимый поток.

0 голосов
/ 08 июля 2019
protected LocationRequest locationRequest;



public void checkForLocationRequest() {
        locationRequest = LocationRequest.create();
        locationRequest.setInterval(MIN_UPDATE_INTERVAL);
        locationRequest.setNumUpdates(1);
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
//        locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
    }
    public void checkForLocationSettings() {
        try {
            LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(locationRequest);
            builder.addLocationRequest(locationRequest);
            SettingsClient settingsClient = LocationServices.getSettingsClient(MainActivity.this);
            settingsClient.checkLocationSettings(builder.build())
                    .addOnSuccessListener((Activity) MainActivity.this, new OnSuccessListener<LocationSettingsResponse>() {
                        @Override
                        public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
//                            delay(1);
                            //Setting is success...
                            //  Toast.makeText(SplashActivity.this, "Enabled the Location successfully. Now you can press the buttons..", Toast.LENGTH_SHORT).show();
                        }
                    })
                    .addOnFailureListener((Activity) MainActivity.this, new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            int statusCode = ((ApiException) e).getStatusCode();
                            switch (statusCode) {
                                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                                    try {
                                        // Show the dialog by calling startResolutionForResult(), and check the
                                        // result in onActivityResult().

                                        ResolvableApiException rae = (ResolvableApiException) e;
                                        rae.startResolutionForResult((Activity) MainActivity.this, GET_PERMISSION_REQ_CODE);
                                    } catch (Exception ex) {
                                        new MyUtils().catchError(MainActivity.this, ex);
                                    }
                                    break;
                                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                                    Toast.makeText(MainActivity.this, "Setting change is not available.Try in another device.", Toast.LENGTH_LONG).show();
                            }
                        }
                    });
        } catch (Exception e) {
            new MyUtils().catchError(MainActivity.this, e);

        }
    }

Этот код выше показывает всплывающее окно для включения GPS, если GPS не включен, а также дает обратный вызов для успеха и неудачи

...