gpt4 book ai didi

java - 如何在 Android Studio 中请求位置权限?

转载 作者:行者123 更新时间:2023-11-29 00:53:37 25 4
gpt4 key购买 nike

我尝试了很多代码和解决方案,但没有一个奏效。我想请求用户许可并获得弹出窗口。即使我使用了窗口不会显示的代码?我认为代码可以更改,但我不知道将它放在哪里。另外,我是 Android Studio 的新手



public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {


private GoogleMap mMap;
private LatLngBounds PODGORICA = new LatLngBounds(
new LatLng(42.400334, 19.227705), new LatLng(42.470269, 19.323107));

private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mToggle;


private static final String TAG = "MapActivity";

LocationManager locationManager;
String provider;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open, R.string.close);

mDrawerLayout.addDrawerListener(mToggle);
mToggle.syncState();

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);


Button btnQR = (Button) findViewById(R.id.skener);


btnQR.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
}
});

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.INTERNET}
,10);
}
return;
}


}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}


@Override
public void onMapReady(GoogleMap googleMap) {


mMap = googleMap;

mMap.setLatLngBoundsForCameraTarget(PODGORICA);
mMap.setMinZoomPreference(5.0f);
mMap.setMaxZoomPreference(25.0f);

CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(42.441332, 19.262953))
.zoom(15)
.bearing(0)
//.tilt(45)
.build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));



// mMap.setMyLocationEnabled(true);

}

我什至尝试了来自 Google 官方页面的代码,但得到了相同的结果......

最佳答案

从 API 级别 23(Android 6.0 Marshmallow)开始,我们需要向用户端请求运行时许可。您可以分两步完成此操作。

1)在AndroidManifest.xml中添加这两个权限文件。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

例子:

<manifest xlmns:android...>
...
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application ...
</manifest>

2) 将此代码块放在需要获取当前位置的类中

    if ( Build.VERSION.SDK_INT >= 23){
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED ){
requestPermissions(new String[]{
android.Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_CODE_ASK_PERMISSIONS);
return ;
}
}

getLocation();

}
//get access to location permission
final private int REQUEST_CODE_ASK_PERMISSIONS = 123;



@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_PERMISSIONS:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getLocation();
} else {
// Permission Denied
Toast.makeText( this,"your message" , Toast.LENGTH_SHORT)
.show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}

//Get location
public void getLocation(){
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Location myLocation=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (myLocation == null)
{
myLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);

}
}

关于java - 如何在 Android Studio 中请求位置权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57098852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com