我正在尝试将用户地理位置。它在一项活动中起作用,但我无法使其在片段中起作用(在这里映射(。
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)
您可以正常进行。