如何在Android Studio中请求位置许可? [英] How to ask for location permission in Android Studio?

查看:95
本文介绍了如何在Android Studio中请求位置许可?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试了很多代码和解决方案,但没有一个起作用.我想询问用户许可并获取弹出窗口.即使我使用了代码,窗口也不会显示?我认为代码可以更改,但是我不知道确切的位置.另外,我是Android Studio的新手

I have tried so many codes and solutions but none of them worked. I want to ask the user for permission and get the pop-up window. Even though I used the code the window won't show? I think the code can get changed but I don't know exactly where to place it. Also, I'm new to 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官方页面上的代码,但得到了相同的结果...

I even tried codes from Googles official page but got same result...

推荐答案

从API级别23(Android 6.0棉花糖)开始,我们需要向用户端请求运行时权限.您可以分两个步骤进行操作.

From API level 23 (Android 6.0 Marshmallow) we need to ask Run-time permission from the user-end. You can do this in two steps.

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

1) Add these two permissions in AndroidManifest.xml file.

<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)将此代码块放入需要获取当前位置的类中

2) Put this code block inside class where you need to get current location

    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);

              }
  }

这篇关于如何在Android Studio中请求位置许可?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆