Nazoog
Nazoog

Reputation: 17

Trying to prompt user to set permissions on app launch in AndroidManifest

Okay, so in my AndroidManifest.xml file, I'm trying to set my permissions such that when the App launches, the user is asked to allow Location + Storage permissions.

I'm working off the BluetoothLeGatt example, and I used the uses-permission-sdk-23 tags to do it.

For reference, here's my code:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.bluetoothlegatt"
    android:versionCode="1"
    android:versionName="1.0">

    <!-- Min/target SDK versions (<uses-sdk>) managed by build.gradle -->

    <!-- Declare this required feature if you want to make the app available to BLE-capable
    devices only.  If you want to make your app available to devices that don't support BLE,
    you should omit this in the manifest.  Instead, determine BLE capability by using
    PackageManager.hasSystemFeature(FEATURE_BLUETOOTH_LE) -->
    <uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

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

    <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
    <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application android:label="@string/app_name"
        android:icon="@drawable/ic_launcher"
        android:theme="@android:style/Theme.Holo.Light">
        <activity android:name=".DeviceScanActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".DeviceControlActivity"/>
        <service android:name=".BluetoothLeService" android:enabled="true"/>
    </application>

</manifest>

Upvotes: 0

Views: 916

Answers (2)

Abhishek Charismatic
Abhishek Charismatic

Reputation: 366

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

In MainActivity add the following

 if (Build.VERSION.SDK_INT < 23) {

    //We already have permission. Write your function call over hear

} else {

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        // Here we are asking for permission

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);


    } else {

//If the app is running for second time, then we already have 
permission. You can write your function here, if we already have 
permission.//



    }

}

do same for memory storage..

Upvotes: 1

AskNilesh
AskNilesh

Reputation: 69709

try this

step 1 :- add permission that you want in manifiest file like this

 android.Manifest.permission.ACCESS_FINE_LOCATION,
 android.Manifest.permission.ACCESS_COARSE_LOCATION,

step 2 : ask runtime permission like this

String permission = android.Manifest.permission.ACCESS_FINE_LOCATION;
        if (ActivityCompat.checkSelfPermission(SearchCityClass.this, permission)
                != PackageManager.PERMISSION_GRANTED && ActivityCompat.
                checkSelfPermission(SearchCityClass.this, android.Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(SearchCityClass.this, new String[]
                    {permission}, PERMISSION_GPS_CODE);

        }

step 3: handle permission result like this

 @Override
 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                   @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_GPS_CODE) {
    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {


        Toast.makeText(this, location_permission_granted_msg, Toast.LENGTH_SHORT).show();

    } else {

        Toast.makeText(this, location_permission_not_granted_msg, Toast.LENGTH_SHORT).show();
    }
}

}

Upvotes: 1

Related Questions