请求权限错误

时间:2016-04-10 21:29:01

标签: java android permissions android-permissions

我正在尝试制作地图活动。在这个地图活动中,我想显示一个"当前位置"按钮,所以为了使这看起来我需要请求位置权限。

由于某些原因,我尝试请求的所有请求权限都没有显示出来。

请求窗口甚至不显示。可能是什么问题?

这是我的代码:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private static final String FIREBASE_URL="https://****.firebaseio.com/";
private Firebase firebaseRef;
private LocationManager locationManager;
private GoogleMap mMap;
SupportMapFragment mapFrag;
boolean bPermissionGranted;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps2);
Firebase.setAndroidContext(this);
firebaseRef = new Firebase(FIREBASE_URL);

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




setUpMapIfNeeded();

 }

private void setUpMapIfNeeded() {
if (mMap == null) {
    // Try to obtain the map from the SupportMapFragment.
    mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
            .getMap();

    if (mMap != null) {


        CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(32.065483, 34.824550));
        CameraUpdate zoom = CameraUpdateFactory.zoomTo(10);
        mMap.moveCamera(center);
        mMap.animateCamera(zoom);

    }
}
}

public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99;
public void checkLocationPermission() {
if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.ACCESS_FINE_LOCATION)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION)) {
            showMessageOKCancel("You need to accept location permissions for using these services!,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
                            {
                                Toast.makeText(MapsActivity.this, "came here 1", Toast.LENGTH_SHORT).show();
                                requestPermissions(new String[]{Manifest.permission.WRITE_CONTACTS},
                                        MY_PERMISSIONS_REQUEST_LOCATION);
                        }
                        }
                    });
            return;
        }

        requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                MY_PERMISSIONS_REQUEST_LOCATION);
        Toast.makeText(MapsActivity.this, "came here 2", Toast.LENGTH_SHORT).show();
        return;

    }
    else
    {
        mMap.setMyLocationEnabled(true);
        Toast.makeText(MapsActivity.this, "came here 3", Toast.LENGTH_SHORT).show();
    }
}



 }

private void showMessageOKCancel(String message,    DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(MapsActivity.this)
        .setMessage(message)
        .setPositiveButton("OK", okListener)
        .setNegativeButton("Cancel", null)
        .create()
        .show();
}

@Override
public void onRequestPermissionsResult(int requestCode,
                                   String permissions[], int[] grantResults)     {
switch (requestCode) {
    case MY_PERMISSIONS_REQUEST_LOCATION: {
        // If request is cancelled, the result arrays are empty.
        if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            // permission was granted, yay!
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
                    ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
                mMap.setMyLocationEnabled(true);
            }
        } else {
            // permission denied, boo! Disable the
            // functionality that depends on this permission.
            Toast.makeText(this, "Permission Denied", Toast.LENGTH_LONG).show();
        }
        return;
    }

}
}


@Override
public void onMapReady(final GoogleMap googleMap) {

mMap=googleMap;

mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);

checkLocationPermission();


}

除了这些行之外,我是否需要在清单中写一些东西?:

在我的logcat中,我发现了这个:

E/linker: readlink('/proc/self/fd/22') failed: Permission denied [fd=22]

E/linker: warning: unable to get realpath for the library "/data/data/com.tranzmate/app_dx/v1/Generated_-470173342.dex". Will use given name.

这也是出现的:

GoogleService failed to initialize, status: 10, Missing an expected resource: 'R.string.google_app_id' for initializing Google services. Possible causes are missing google-services.json or com.google.gms.google-services gradle plugin. 04-11 00:18:20.228 15674-15674/? E/GMPM: Scheduler not set. Not logging error/warn. 04-11 00:18:20.254 15674-15692/? E/GMPM: Uploading is not possible. App measurement disabled

也许它是gradle文件中的内容?

或许SDK中需要安装它?

1 个答案:

答案 0 :(得分:0)

必须检入Manifest文件,在此文件中您称此权限为无添加

  

noHistory = true