【问题标题】:Permission error using GPS使用 GPS 的权限错误
【发布时间】:2016-12-16 14:57:05
【问题描述】:

我想找回手机的位置,但这条线有问题:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,10000,0,(LocationListener) this);

我知道问题是权限检查,但我不知道在我的代码中执行此操作:

package com.cmn.cmnvtc;

import android.app.Fragment;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;


public class MainPageFragment1 extends Fragment implements OnMapReadyCallback, LocationListener {


    LocationManager locationManager;
    public LatLng myLocation;



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_main1, container, false);


        locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,10000,0,(LocationListener) this);
        return v;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        MapFragment fragment = (MapFragment) getChildFragmentManager().findFragmentById(R.id.map);
        fragment.getMapAsync(this);

    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        LatLng marker = new LatLng(48.9818555, 2.270541);
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(marker, 15));
        googleMap.addMarker(new MarkerOptions().title("Le garage").position(marker));
        googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);

    }

    @Override
    public void onLocationChanged(Location location) {
        if(location != null){
            Toast.makeText(getActivity(), "Latitude:" + location.getLatitude() + " - Longitude:" + location.getLongitude(), Toast.LENGTH_SHORT);
        }
    }

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

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }
}

请问我该怎么做?

我的错误在代码中:“添加权限检查”

【问题讨论】:

    标签: java android android-fragments permissions location


    【解决方案1】:

    您需要检查它是否有 Marshmollow

    private static final int GRANTED = PackageManager.PERMISSION_GRANTED;
    
    if (checkCoarseLocationPermission(getActivity()) &&  checkFineLocationPermission(getActivity())) {
            //permissions are granted
        }else {
            requestLocationPermission(getActivity());
        }
    }
    
    public boolean checkCoarseLocationPermission(Activity mActivity){
        int permissionCheck = ContextCompat.checkSelfPermission(mActivity,
                Manifest.permission.ACCESS_COARSE_LOCATION);
        return permissionCheck == GRANTED;
    }
    
    public boolean checkFineLocationPermission(Activity mActivity){
        int permissionCheck = ContextCompat.checkSelfPermission(mActivity,
                Manifest.permission.ACCESS_FINE_LOCATION);
        return permissionCheck == GRANTED;
    }
    
    public void requestLocationPermission(Activity mActivity){
        ActivityCompat.requestPermissions(mActivity,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
                MY_PERMISSIONS_REQUEST_LOCATION);
    }
    

    【讨论】:

    • 在方法 checkCoarseLocationPermission、checkFineLocationPermission 和 requestLocationPermission 中,IDE 找不到权限 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION 和 MY_PERMISSIONS_REQUEST_LOCATION
    • 你必须导入 android.Manifest 而不是你的包本地清单
    • MY_PERMISSIONS_REQUEST_LOCATION 不存在
    • 这只是 int, public static final int MY_PERMISSIONS_REQUEST_LOCATION = 11223;
    【解决方案2】:

    您需要在应用的清单中添加权限。打开你的 manifest.xml 并输入这两行:

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

    ACCESS_FINE_LOCATION 允许您的应用使用实际 GPS 跟踪用户位置。 ACCESS_COARSE_LOCATION 允许您的应用使用 WiFi 网络跟踪用户位置,因此如果您只使用 GPS,则可以省略此项。

    【讨论】:

    • 我做了但是不行,同样的问题
    • 这是一条 IDE 消息。您是否尝试过运行该程序?
    • 不,但我知道它不起作用。我的手机运行 Android 6
    【解决方案3】:

    试试这个 公共无效onLocationChanged(位置位置){ 如果(位置!= null){ location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); Toast.makeText(getActivity(), "纬度:" + location.getLatitude() + " - 经度:" + location.getLongitude(), Toast.LENGTH_SHORT); } }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多