phonegap / build

This is the public repository for PhoneGap Build source and bug tracking
92 stars 33 forks source link

[Android] PhoneGap wont work with Nexus 7 camera #90

Closed damiant closed 10 years ago

damiant commented 11 years ago

The camera feature in config.xml is mapped to android.hardware.camera which is only for rear facing cameras meaning that you cannot get Nexus 7 tablet to work which only has a front facing camera.

Is there a way to map to android.hardware.camera.any ? or add the option for android:required="false" ?

amirudin commented 11 years ago

Related issue: http://community.phonegap.com/nitobi/topics/phonegap_build_optional_permissions_for_android

orenagiv commented 11 years ago

Workaround - that is also relevant for users using PhoneGAP Build: Simply generate 2 APKs: One with the Camera permissions, and the other without. When publishing in Google Play - it is possible to deploy 2 APKs, and Google Play knows to perform the "merge" in order to allow maximum supported devices.

Hope this also helps someone :)

shawnmckay24 commented 11 years ago

Thank you for submitting an issue. The PhoneGap Build team has triaged your request and labeled it:

  1. feature request
  2. medium priority

We've added your request to the team's backlog. Due to high volumes, there may be a delay in addressing your request. Rest assured, we haven't lost track of your request. Your feedback is very valuable to us, so please keep it coming.

If you have any questions, please ask us over on our support community. We love to help!

Cheers,

The PhoneGap Build team

jbenson77 commented 10 years ago

Is there any progress with this issue? I have a Nexus 7 tablet which fails when I try to access the PhoneGap BarcodeScanner plugin.

JohnMcLear commented 10 years ago

I'm also in need of a fix for this :) Thanks!

red2678 commented 10 years ago

Man, I need this bad :) Thanks!

amirudin commented 10 years ago

Related topic:

jlsync commented 10 years ago

With phonegap/cordova CLI 3.0.4 I have no good understanding of the docs and various levels levels of configuration and different xml files, however I can report that the camera plugin now seems to work just fine on my Nexus7 and matches the device profile in the google Play store.

ghost commented 10 years ago

I also think that is important solve this... I can't understand why camera.autofocus is marked as default and no only camera

basterbrugge commented 10 years ago

+1 on this

spidara commented 10 years ago

Really need this. Cannot use features like camera and geolocation if you do not declare. If you declare then many devices are excluded. For example, trying to use camera (which is optional in the App) makes 800+ devices unsupported.

Android manifest provides a way to make a feature required or optional. PhoneGap is limiting this. If this constraint continues.then will need to use something else.

PraveshShokeen commented 10 years ago

We need require this functionality from PhoneGap.

Due to this limitation app is excluding in filter by GooglePlay. Not supporting to large devices.

So please make enable this(android:required="false") feature.

I hope you will look into this matter soon.

wildabeast commented 10 years ago

After some digging / testing, here's how i'm seeing the current issue (comment if you think I've missed something):

Firstly my testing found that with the camera feature enabled, front facing cameras (i.e. Nexus 7) worked fine.

The original poster indicated that the config.xml camera feature tag <feature name="http://api.phonegap.com/1.0/camera"/> maps to <uses-feature android:name="android.hardware.camera" />, but this is not the case. It maps only to <uses-permission android:name="android.permission.CAMERA" />.

If you're seeing <uses-feature android:name="android.hardware.camera" /> in your manifest, then you are likely using the BarcodeScanner plugin, as this tag is specified in its plugin.xml. You'll also see that android:required="false" has been added there which should solve the problem for BarcodeScanner users.

Thus the current issue is that users not including the BarcodeScanner do not get <uses-feature android:name="android.hardware.camera" android:required="false" /> (or camera.any) included in their manifest, which thus prevents the app from being available to devices with front-facing cameras only. So will add this.

The next step after this will be to examine how we can make features / permissions more configurable in general, specifically by making them optional (android:required=false).

wildabeast commented 10 years ago

Fixed.

JohnMcLear commented 10 years ago

Thanks!

red2678 commented 10 years ago

:)

Barranha commented 10 years ago

Hello.... I need a help... I'm using the phonegap build. I'm having problem with the camera "Sorry, the Android camera encountered a problem. You may need to restart the device" What I heve to do? It need to work on Android and Iphone devices

Here is my config.xml

<?xml version="1.0" encoding="UTF-8"?>

<widget xmlns = "http://www.w3.org/ns/widgets" xmlns:gap = "http://phonegap.com/ns/1.0" id = "br.com.teste" version = "1.0.0">

<name>teste</name>

<description>
    teste
</description>

<author href="http://www.teste.com.br" email="suporte@teste.com.br">
    Equipe Teste
</author>
<!--
    Enable individual API permissions here.
    The "device" permission is required for the 'deviceready' event.
-->
<feature name="http://api.phonegap.com/1.0/device" />

<!--
    If you do not want any permissions to be added to your app, add the
    following tag to your config.xml; you will still have the INTERNET
    permission on your app, which PhoneGap requires.
-->
<!-- to enable individual permissions use the following examples -->
<feature name="http://api.phonegap.com/1.0/geolocation"/>
<feature name="http://api.phonegap.com/1.0/network"/>

<!-- Customize your app and platform with the preference element. -->
<preference name="phonegap-version"           value="2.9.0" />          <!-- all: current version of PhoneGap -->
<preference name="orientation"                value="default" />        <!-- all: default means both landscape and portrait are enabled -->
<preference name="target-device"              value="universal" />      <!-- all: possible values handset, tablet, or universal -->
<preference name="fullscreen"                 value="true" />           <!-- all: hides the status bar at the top of the screen -->
<preference name="webviewbounce"              value="true" />           <!-- ios: control whether the screen 'bounces' when scrolled beyond the top -->
<preference name="prerendered-icon"           value="true" />           <!-- ios: if icon is prerendered, iOS will not apply it's gloss to the app's icon on the user's home screen -->
<preference name="stay-in-webview"            value="false" />          <!-- ios: external links should open in the default browser, 'true' would use the webview the app lives in -->
<preference name="ios-statusbarstyle"         value="black-opaque" />   <!-- ios: black-translucent will appear black because the PhoneGap webview doesn't go beneath the status bar -->
<preference name="detect-data-types"          value="true" />           <!-- ios: controls whether data types (such as phone no. and dates) are automatically turned into links by the system -->
<preference name="exit-on-suspend"            value="false" />          <!-- ios: if set to true, app will terminate when home button is pressed -->
<preference name="show-splash-screen-spinner" value="true" />           <!-- ios: if set to false, the spinner won't appear on the splash screen during app loading -->
<preference name="auto-hide-splash-screen"    value="true" />           <!-- ios: if set to false, the splash screen must be hidden using a JavaScript API -->
<preference name="disable-cursor"             value="false" />          <!-- blackberry: prevents a mouse-icon/cursor from being displayed on the app -->
<preference name="android-minSdkVersion"      value="8" />              <!-- android: MIN SDK version supported on the target device. MAX version is blank by default. -->
<preference name="android-installLocation"    value="auto" />           <!-- android: app install location. 'auto' will choose. 'internalOnly' is device memory. 'preferExternal' is SDCard. -->

<!-- Plugins can also be added here. -->
<!--
    <gap:plugin name="Example" />
    A list of available plugins are available at https://build.phonegap.com/docs/plugins
-->
<!--
<plugin name="InAppBrowser" value="org.apache.cordova.InAppBrowser" />
<plugin name="InAppBrowser" value="CDVInAppBrowser" />-->
<gap:plugin name="com.phonegap.plugins.barcodescanner" version="0.6.0"/>
<!--<gap:plugin name="com.pushwoosh.plugins.pushwoosh" />-->

<!-- Define app icon for each platform. -->
<icon src="icon.png" />
<icon src="res/icon/android/icon-36-ldpi.png"   gap:platform="android"    gap:density="ldpi" />
<icon src="res/icon/android/icon-48-mdpi.png"   gap:platform="android"    gap:density="mdpi" />
<icon src="res/icon/android/icon-72-hdpi.png"   gap:platform="android"    gap:density="hdpi" />
<icon src="res/icon/android/icon-96-xhdpi.png"  gap:platform="android"    gap:density="xhdpi" />
<icon src="res/icon/blackberry/icon-80.png"     gap:platform="blackberry" />
<icon src="res/icon/blackberry/icon-80.png"     gap:platform="blackberry" gap:state="hover"/>
<icon src="res/icon/ios/icon-57.png"            gap:platform="ios"        width="57" height="57" />
<icon src="res/icon/ios/icon-72.png"            gap:platform="ios"        width="72" height="72" />
<icon src="res/icon/ios/icon-57-2x.png"         gap:platform="ios"        width="114" height="114" />
<icon src="res/icon/ios/icon-72-2x.png"         gap:platform="ios"        width="144" height="144" />
<icon src="res/icon/webos/icon-64.png"          gap:platform="webos" />
<icon src="res/icon/windows-phone/icon-48.png"  gap:platform="winphone" />
<icon src="res/icon/windows-phone/icon-173.png" gap:platform="winphone"   gap:role="background" />

<!-- Define app splash screen for each platform. -->
<gap:splash src="res/screen/android/screen-ldpi-portrait.png"  gap:platform="android" gap:density="ldpi" />
<gap:splash src="res/screen/android/screen-mdpi-portrait.png"  gap:platform="android" gap:density="mdpi" />
<gap:splash src="res/screen/android/screen-hdpi-portrait.png"  gap:platform="android" gap:density="hdpi" />
<gap:splash src="res/screen/android/screen-xhdpi-portrait.png" gap:platform="android" gap:density="xhdpi" />
<gap:splash src="res/screen/blackberry/screen-225.png"         gap:platform="blackberry" />
<gap:splash src="res/screen/ios/screen-iphone-portrait.png"    gap:platform="ios"     width="320" height="480" />
<gap:splash src="res/screen/ios/screen-iphone-portrait-2x.png" gap:platform="ios"     width="640" height="960" />
<gap:splash src="res/screen/ios/screen-ipad-portrait.png"      gap:platform="ios"     width="768" height="1024" />
<gap:splash src="res/screen/ios/screen-ipad-landscape.png"     gap:platform="ios"     width="1024" height="768" />
<gap:splash src="res/screen/windows-phone/screen-portrait.jpg" gap:platform="winphone" />

<!--
    Define access to external domains.

    <access />            - a blank access tag denies access to all external resources.
    <access origin="*" /> - a wildcard access tag allows access to all external resource.

    Otherwise, you can specify specific domains:
-->

<access origin="*"/> <!-- allow local pages -->

<!--
    <access origin="http://phonegap.com" />                    - allow any secure requests to http://phonegap.com/
    <access origin="http://phonegap.com" subdomains="true" />  - same as above, but including subdomains, such as http://build.phonegap.com/
    <access origin="http://phonegap.com" browserOnly="true" /> - only allows http://phonegap.com to be opened by the child browser.
-->

Barranha commented 10 years ago

Another question.... I'm trying to use try/catch.... when the camera crash the app .... without success (the app crashes anyway). I want to give another option to the user when this error happens. (Option = the user can type the code) But try/catch is not working for preventing the crash. Is there another way to prevent the error "Sorry, the Android camera encountered a problem. You may need to restart the device"? And then ask for the code to the user? Here is my code

try {
        var scanner = cordova.require("cordova/plugin/BarcodeScanner");
        scanner.scan( function (result) { 
            if  (result.cancelled==true)
            {
                return;
            }
            codigo_lido = result.text;
                            alert(codigo_lido);

        }, function (error) 
        {
                            AskUser();
        });
} catch (ex) 
{
                  AskUser();
}