安卓地理定位 API > 23

  • 本文关键字:API 定位 java android
  • 更新时间 :
  • 英文 :


我正在尝试将用户地理位置。它在一项活动中起作用,但我无法使其在片段中起作用(在这里映射(。

public class MainActivity extends AppCompatActivity {
    private int MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /***********************Geolocalisation de l'utilisateur***********************/
        /***********DROITS*********/
        // Assume thisActivity is the current activity
        int permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.WRITE_CALENDAR);
        Log.e("DROITS :", String.valueOf(permissionCheck));
        if (ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
                    Manifest.permission.ACCESS_FINE_LOCATION)) {
                // Show an expanation to the user *asynchronously* -- don't block
                // this thread waiting for the user's response! After the user
                // sees the explanation, try again to request the permission.
            } else {
                // No explanation needed, we can request the permission.
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                        MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
                // MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION is an
                // app-defined int constant. The callback method gets the
                // result of the request.
            }
        }
        permissionCheck = ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.WRITE_CALENDAR);
        Log.e("DROITS :", String.valueOf(permissionCheck));
        /**************************/
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        ArrayList<String> names = (ArrayList<String>) locationManager.getProviders(true); //Récupère les providers
        //On ajoute des critère pour trouver le meilleur provider (indicateur de position)
        Criteria critere = new Criteria();
        critere.setAccuracy(Criteria.ACCURACY_FINE);//On demande une position précise
        critere.setAltitudeRequired(false);         // Est-ce que le fournisseur doit être capable de donner une altitude ?
        critere.setBearingRequired(true);           // Est-ce que le fournisseur doit être capable de donner une direction ?
        critere.setCostAllowed(false);              // Est-ce que le fournisseur peut être payant ?
        critere.setPowerRequirement(Criteria.POWER_HIGH); //On accepte d'utiliser un provider a haute consommation électrique(GPS)
        critere.setSpeedRequired(false); // Est-ce que le fournisseur doit être capable de donner une vitesse ?
        List<String> providers = locationManager.getAllProviders(); //Liste des fournisseurs qui correspondent
        String bestProvider = locationManager.getBestProvider(critere, true); //Liste des fournisseurs qui correspondent

        int y = 0;
        Log.e("Provider n°", "fdfgdfgdf");
        Log.e("Provider n°", String.valueOf(providers.size()));
        if(bestProvider == null)
        {
            Log.e("Best Provider","NULL");
        }
        else{
            Log.e("Best Provider", bestProvider);
        }
        Location positionNow = locationManager.getLastKnownLocation(bestProvider); //Objet location qui contient la position de l'utilisateur
        Log.e("Position user now", "Lat:"+String.valueOf(positionNow.getLatitude()));
    }
}

我试图使用"上下文",但它不起作用。例如:上下文不知道"应该归功于showrequestpermissionrationale"。我用:"上下文mainContext = getActivity((。getApplicationContext((;"

我从Android开始,谢谢您的帮助

编辑:我尝试了。但是我遇到了一个错误:" android。

public class MapsFragment extends Fragment implements OnMapReadyCallback {
private int REQUEST_LOCATION;
private List<Marqueur> tousLesMarqueurs = new ArrayList<>();
public MapsFragment() {
    /*******/
    getUserPosition();
    getAllMark();
    /*******/
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //return inflater.inflate(R.layout.fragment_maps, container, false);
    final View rootView = inflater.inflate(R.layout.fragment_maps, container, false);
    final SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    return rootView;
}
@Override
public void onMapReady(GoogleMap googleMap) {
  
    //Add Markers
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
}
public void getAllMark() {
    //API REST Request
    }
public void getUserPosition()
{
    /**************AUTORISATION***************/
    Context mainContext = getActivity().getApplicationContext();
    // Assume thisActivity is the current activity
    int permissionCheck = ContextCompat.checkSelfPermission(mainContext,
            Manifest.permission.WRITE_CALENDAR);
    Log.e("DROITS :", String.valueOf(permissionCheck));
    if (ContextCompat.checkSelfPermission(mainContext,
            Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mainContext,
                Manifest.permission.ACCESS_FINE_LOCATION)) {
            // Show an expanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.
        } else {
            // No explanation needed, we can request the permission.
            ActivityCompat.requestPermissions((Activity) mainContext,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    REQUEST_LOCATION);
            // MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }
    }
    permissionCheck = ContextCompat.checkSelfPermission(mainContext,
            Manifest.permission.WRITE_CALENDAR);
    Log.e("DROITS :", String.valueOf(permissionCheck));
    /*****************************/
    /*
    LocationManager locationManager = (LocationManager) mainContext.getSystemService(Context.LOCATION_SERVICE);
    ArrayList<String> names = (ArrayList<String>) locationManager.getProviders(true); //Récupère les providers
    //On ajoute des critère pour trouver le meilleur provider (indicateur de position)
    Criteria critere = new Criteria();
    critere.setAccuracy(Criteria.ACCURACY_FINE);//On demande une position précise
    critere.setAltitudeRequired(false);         // Est-ce que le fournisseur doit être capable de donner une altitude ?
    critere.setBearingRequired(true);           // Est-ce que le fournisseur doit être capable de donner une direction ?
    critere.setCostAllowed(false);              // Est-ce que le fournisseur peut être payant ?
    critere.setPowerRequirement(Criteria.POWER_HIGH); //On accepte d'utiliser un provider a haute consommation électrique(GPS)
    critere.setSpeedRequired(false); // Est-ce que le fournisseur doit être capable de donner une vitesse ?
    List<String> providers = locationManager.getAllProviders(); //Liste des fournisseurs qui correspondent
    String bestProvider = locationManager.getBestProvider(critere, true); //Liste des fournisseurs qui correspondent

    int y = 0;
    Log.e("Provider n°", "fdfgdfgdf");
    Log.e("Provider n°", String.valueOf(providers.size()));
    if(bestProvider == null)
    {
        Log.e("Best Provider","NULL");
    }
    else{
        Log.e("Best Provider", bestProvider);
    }
    Location positionNow = locationManager.getLastKnownLocation(bestProvider); //Objet location qui contient la position de l'utilisateur
    Log.e("Position user now", "Lat:"+String.valueOf(positionNow.getLatitude()));*/
}
}//Fin Class

编辑2:非常感谢您的帮助!我没有错误,但显然没有激活IF。我在正确的街区吗?"

public void getUserPosition() {
        /*****************************/
        Context mainContext = getActivity().getApplicationContext();
        // Assume thisActivity is the current activity
        int permissionCheck = ContextCompat.checkSelfPermission(mainContext,
                Manifest.permission.WRITE_CALENDAR);
        Log.e("DROITS :", String.valueOf(permissionCheck));
        if (ContextCompat.checkSelfPermission(mainContext,
                Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mainContext,
                    Manifest.permission.ACCESS_FINE_LOCATION)) {
                LocationManager locationManager = (LocationManager) mainContext.getSystemService(Context.LOCATION_SERVICE);
                ArrayList<String> names = (ArrayList<String>) locationManager.getProviders(true); //Récupère les providers
                //On ajoute des critère pour trouver le meilleur provider (indicateur de position)
                Criteria critere = new Criteria();
                critere.setAccuracy(Criteria.ACCURACY_FINE);//On demande une position précise
                critere.setAltitudeRequired(false);         // Est-ce que le fournisseur doit être capable de donner une altitude ?
                critere.setBearingRequired(true);           // Est-ce que le fournisseur doit être capable de donner une direction ?
                critere.setCostAllowed(false);              // Est-ce que le fournisseur peut être payant ?
                critere.setPowerRequirement(Criteria.POWER_HIGH); //On accepte d'utiliser un provider a haute consommation électrique(GPS)
                critere.setSpeedRequired(false); // Est-ce que le fournisseur doit être capable de donner une vitesse ?
                List<String> providers = locationManager.getAllProviders(); //Liste des fournisseurs qui correspondent
                String bestProvider = locationManager.getBestProvider(critere, true); //Liste des fournisseurs qui correspondent

                int y = 0;
                Log.e("Provider n°", "fdfgdfgdf");
                Log.e("Provider n°", String.valueOf(providers.size()));
                if(bestProvider == null)
                {
                    Log.e("Best Provider","NULL");
                }
                else{
                    Log.e("Best Provider", bestProvider);
                }
                Location positionNow = locationManager.getLastKnownLocation(bestProvider); //Objet location qui contient la position de l'utilisateur
                Log.e("Position user now", "Lat:"+String.valueOf(positionNow.getLatitude()));
            } else {
                // No explanation needed, we can request the permission.
                Log.e("PAS LE DROIT!", "GPS INTERDIT !");
                ActivityCompat.requestPermissions((Activity) mainContext,
                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                        REQUEST_LOCATION);
                // MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION is an
                // app-defined int constant. The callback method gets the
                // result of the request.
            }
        }
        permissionCheck = ContextCompat.checkSelfPermission(mainContext,
                Manifest.permission.WRITE_CALENDAR);
        Log.e("DROITS :", String.valueOf(permissionCheck));
        /*****************************/
    }
}//Fin Class

"

在您的片段中,您可以将上下文打入活动。

((MainActivity)context) or ((MainActivity)getActivity)

您可以正常进行。

最新更新