Thanks to this question https://stackoverflow.com/a/32084038/1979882
I found that I have to ask the user if he/she grants my app to retrieve the location. Ok, this work for android.Manifest.permission.ACCESS_FINE_LOCATION in Android 6.0 or it will show this error:
java.lang.RuntimeException: Unable to start activity ComponentInfo{my.app/my.pack.mActivity}: java.lang.SecurityException: "network" location provider requires ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission.
But in my application there are several permissions:
<uses-permission android:name="android.permission.REORDER_TASKS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="ru.ps.vm.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
Which of them are needed requestPermissions() method to ask the user?
Related
I'm making a React-Native app and in the AndroidManifest.xml file, I ask some things :
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.RECORD_VIDEO"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" android:maxSdkVersion="29"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
As you can see, I never ask my app to access to the contacts.
However, when I build my app, she ask me the permission to access to my contacts.
Have you an idea ? Thanks !
You can check which dependency has added the permission by looking at the
android/app/build/outputs/logs/manifest-merger-debug-report.txt log.
The AndroidManifest.xml contains these (and some more) permissions:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
The WRITE_EXTERNAL_STORAGE is contained two times. So I remove one and reorder:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
The audio recorder (https://github.com/3llomi/RecordView) normally requests storage access permission and microphone access permission. But after the change it does not request the storage access anymore and therefore the record view does not work.
I uninstall the app from the device for each manifest change to reset permissions.
How is it possible that removing a duplicate line causes this?
The merged view of the AndroidManifest.xml revealed that another library also declares this permission with maxSdkVersion="18":
The app was running on API>18, I assume therefore it did not request the permission. Removing maxSdkVersion made the storage permission appear again and the recorder view worked:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:remove="android:maxSdkVersion" />
My guess is that because WRITE_EXTERNAL_STORAGE was contained two times in the AndroidManifest.xml, the manifest merging process added the maxSdkVersion only to one of them. The other WRITE_EXTERNAL_STORAGE had no maxSdkVersion hence the app was requesting the permission also on API>18.
I'm setting up some permissions in my AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
I request the permission on runtime for all of those permissions.
But somehow the permission REQUEST_INSTALL_PACKAGES does not need to call requestPermission(). If I try to call it anyway, the popup never appears.
Is there a list of permissions i need to call at runtime?
My current android version is 8.0.0.
Thanks
Depends on type of permission you are requesting for. There are two kind of permissions in Android: Normal and Dangerous Permissions
If there are dangerous, you must request for it at runtime for API level 23 and above.
For more info you should read following documentation: https://developer.android.com/guide/topics/permissions/requesting.html#normal-dangerous
I just uploaded my SMS application on Google play store but the problem is that whenever user install the application the app needs access to Photo/Media/Files too. However i donot write this permission in my manifest. please tell me whats the issue
I write following permissions in my app:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_WAP_PUSH"/>
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
But it still wants to access to media/photo/files
What is the issue?
However i donot write this permission in my manifest.
Yes, you do:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
What is the issue?
You are asking for a permission (WRITE_EXTERNAL_STORAGE) from the STORAGE permission group.
I have to implement the new permissions system but i cant find some of the permissions i used earlier in my android apss:
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
For example: I used:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
I can now replace this by
<uses-permission android:name="android.permission-group.CONTACTS" />
Because GET_ACCOUNTS is in the Group of CONTACTS.
But what about the other permissions i posted. They are not listed anywhere in the system permissions
The following permissions are not present in Android M.
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
Hence, you can request them using android:maxSdkVersion="22" in you uses-permission tag like this:
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" android:maxSdkVersion="22"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" android:maxSdkVersion="22" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" android:maxSdkVersion="22"/>
You can read more about it here.
As for the last permission. That is:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
You don't need to use the permission request for it, as it is allowed.
Looks like some permissions got deprecated in API level 23. If you are targeting API 23, then take care appropriately (i.e. request permission in runtime for "dangerous" permissions).
I think you should still keep them in manifest file for older SDKs.