I am using the latest version of Cordova (6.3.1) and I want the following permission to appear in the AndroidManifest.xml :
<uses-permission android:name="android.permission.CAMERA" />
Adding this line by hand does not work because the XML is regenerated each time I run the command cordova run android
I have added the cordova-plugin-camera to my project with
cordova plugin add cordova-plugin-camera
This plugin does NOT add the CAMERA permission in the AndroidManifest.xml
I don't know if this is normal
How can I add this permission to my project ?
Edit :
Usually, Cordova plugins are in charge of adding required permissions into the manifest. The camera plugin does not add this specific permission, I wonder :
if the plugin should add this permission (bug ? I have opened an issue on their Jira tracker)
if I can add this permission by hand myself, maybe in the Cordova's config.xml
I don't think the Camera plugin ever added this permission to AndroidManifest.xml. Looking through the Github repo, WRITE_EXTERNAL_STORAGE was added in June 2013 (CB-3654), but I don't see anything for the camera itself. Not sure why that would be, but you can either add the permission to AndroidManifest.xml yourself or add a config-file directive in your project's config.xml file, for example:
<config-file target="AndroidManifest.xml" parent="/*" mode="merge">
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
</config-file>
Are you building native or hybrid app?
For native you can refer this website:
https://developer.android.com/reference/android/hardware/Camera.html
Related
I can't get the cordova-plugin-scanbot-sdk plugin to work with release builds (it works if I build in debug mode), all my plugins are with the latest version, my cordova and cordova android are also up to date.
I can use the camera and filesystem in the app without any problems, but if I try to use the scanbot the app stays on this screen but doesn't ask the user for permission to use the camera. I also tried to add the camera permission manually in config.xml using:
<edit-config file="AndroidManifest.xml" mode="merge" target="/manifest">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</edit-config>
but it didn't work.
Here is a screenshot of what I see when I try to open the plugin.
I've developed a custom plugin for a cordova application and trying to test it out with the latest cordova Android platform version.
Whenever I run:
cordova plugin add ../my-plugin
cordova platform add android
or
cordova platform add android
cordova plugin add ../my-plugin
I get the following error:
Failed to install 'com.my.plugin': Error: ENOENT: no such file or directory, open '/path/to/project/my-application/platforms/android/AndroidManifest.xml'
This is the content of my plugin.xml file for what concerns the AndroidManifest.xml.
<config-file target="app/src/main/AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
</config-file>
I've already seen this answer which is pretty commonly shared throughout different resources and websites I visited but is not helping me since I'm already using app/src/main/AndroidManifest.xml after updating from android#6.4.0 to android#7.0.0.
My environment is:
macOS
cordova#8.1.2
android#7.1.1
Note: As of now I made it work by using android#6.4.0 but I'd like to understand how to make it work with newer platform versions.
I have an ios/android app built using cordova (cli-8.0.0) on the Adobe Phonegap Build platform.
My app uses gps and compass. I need to make the compass a required feature, and the location a not required, but stated feature.
So I tried this in the config.xml using 'uses-feature', but in the generated Android.manifest file, only the compass one is output. Swapping the order of the two uses-feature sections in the config.xml makes the location the only one output in the manifest.
What am I doing wrong??
Chris
<!--Android config overrides-->
<edit-config target="/manifest/uses-feature" file="AndroidManifest.xml" mode="add" platform="android">
<uses-feature android:name="android.hardware.location" android:required="false"/>
</edit-config>
<edit-config target="/manifest/uses-feature" file="AndroidManifest.xml" mode="add" platform="android">
<uses-feature android:name="android.hardware.sensor.compass" android:required="true"/>
</edit-config>
mode="add" is right, but it also needed the target changing to "/manifest" not "/manifest/uses-feature".
Built ok, checked the manifest file and both entries are in there!
I have the permissions setup in my AndroidManifest.xml file that look like this:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
However, everytime I run cordova build android, then cordova run android the permission in system settings for app storage is disabled. Why isn't this option automatically enabled when I have my manifest file setup with the above config?
I'd like to set androids permissions to use geolocation in config.xml.
I don't want to use cordova-plugin-geolocation which would set these settings as a side-effect because the webviews I am targeting (crosswalk) support GeoLocation out of the box. The Plugin would just be bloatware.
I don't want to write it directly in AndroidManifest.xml because I am using cordova prepare to prevent having any plattform-specific stuff inside my repository. Everybody is currently able to build the plattforms from scratch without any plattform-specific stuff from our git-repo.
What I tried
I took a look at cordova-plugin-geolocation to see how they would achieve this.
<platform name="android">
<config-file target="AndroidManifest.xml" parent="/*">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
</config-file>
</platform>
This returns the following in my build-phase
Error: Command failed: /bin/sh -c cordova build android
/Users/sven/.../cordova/platforms/android/build/intermediates/res/armv7/debug/xml/config.xml:34: error: Error parsing XML: unbound prefix
What my next step would be
I am unsure about why the 'rob-from-cordova-plugin-geolocation'-approach does not work, but maybe it would help to just put above into a new plugin? Is it worth a try?
Your error is "unbound prefix", have you provided a definition for the "android" prefix that you're using in "android:name"?
Looking at cordova-plugin-geolocation plugin.xml you may need to add this to your XML:
xmlns:android="http://schemas.android.com/apk/res/android"
So that the android namespace is defined.
You will be able to add permissions (and many other extra configuration actions) in Cordova straight from CLI's config.xml by adding the plugin cordova-custom-config to your environment. It will add nothing in your application and consists only in a group of Cordova hooks.
So, only add the XML chuck in your config.xml (<config-file...), and also add what #SimonPrickett say in his answer.