Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

App requests aren't showing up

I have a map activity in my app. I'm trying to request location permissions on it, but the request permissions are not showing up. I have no idea why...

This is my full code:

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


 }

In the end, the toast "came here 2 showing up". I guess it is because the requests are not showing up. Do I need to write something in the manifest except of these line?:

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

Maybe I need to write something to use these permissions?

After looking again in the logcat, I've found this log I/Choreographer: Skipped 46 frames! The application may be doing too much work on its main thread.

What does it mean?

like image 316
Gilad Neiger Avatar asked Mar 16 '26 17:03

Gilad Neiger


1 Answers

After spending days about this issue, I found out that the reason that the request permissions are not showing up is because of the TabHost.

I've tried to request permissions from a Map Activity which was a part of TabHost in a MainActivity. Now I understood that it is impossible requesting permissions from an activity in TabHost.

After I've moved the request permissions code from the MapActivity to the MainActivity, It worked.

like image 71
Gilad Neiger Avatar answered Mar 18 '26 07:03

Gilad Neiger



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!