0

Android M (6)을 지원하도록 애플리케이션을 업그레이드했지만 Android 6의 사용 권한과 관련된 요구 사항을 알고 있음에도 불구하고 해결할 수없는 문제가 있습니다 (API 23). 내가 폰갭을 사용하고Android M (API 23) - Phonegap 권한 문제

(as far as I see) ACCESS_COARSE_LOCATION 및 ACCESS_FINE_LOCATION 권한을 제공하도록되어 장소의 위치 정보 플러그인과 6.2.6.

그러나 응용 프로그램을 실행하고 BLE 지원 장치를 검색하기 위해 전화를 걸면 다음 오류가 발생합니다. 내가 얻을 수

Caught a RuntimeException from the binder stub implementation. 
java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results 
at android.os.Parcel.readException(Parcel.java:1620) 
at android.os.Parcel.readException(Parcel.java:1573) 
at android.bluetooth.IBluetoothGatt$Stub$Proxy.startScan(IBluetoothGatt.java:772) 
at android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper.onClientRegistered(BluetoothLeScanner.java:324) 
at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:56) 
at android.os.Binder.execTransact(Binder.java:453) 

것은 어떻게 권한을 부여 할 사용자를 요청하기로하고 있다는 점이다? 그것은 플러그인, geolocation의 작업 아닌가요?

추신 : 내가 수동으로 응용 프로그램 설정에서 "geolocation"권한을 부여하면 모든 것이 올바르게 작동합니다.

내 config.xml에 Geolocation 기능이 있습니다.

확인 documentation about themthis related article on android security and permissions : 안드로이드 6

config.xml에

<?xml version='1.0' encoding='utf-8'?> 
<widget id="com.apps.poc1" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0"> 
    <preference name="loglevel" value="DEBUG" /> 
    <feature name="Battery"> 
     <param name="android-package" value="org.apache.cordova.batterystatus.BatteryListener" /> 
    </feature> 
    <feature name="Camera"> 
     <param name="android-package" value="org.apache.cordova.camera.CameraLauncher" /> 
    </feature> 
    <feature name="File"> 
     <param name="android-package" value="org.apache.cordova.file.FileUtils" /> 
     <param name="onload" value="true" /> 
    </feature> 
    <feature name="Capture"> 
     <param name="android-package" value="org.apache.cordova.mediacapture.Capture" /> 
    </feature> 
    <feature name="Contacts"> 
     <param name="android-package" value="org.apache.cordova.contacts.ContactManager" /> 
    </feature> 
    <feature name="Device"> 
     <param name="android-package" value="org.apache.cordova.device.Device" /> 
    </feature> 
    <feature name="Accelerometer"> 
     <param name="android-package" value="org.apache.cordova.devicemotion.AccelListener" /> 
    </feature> 
    <feature name="Compass"> 
     <param name="android-package" value="org.apache.cordova.deviceorientation.CompassListener" /> 
    </feature> 
    <feature name="Notification"> 
     <param name="android-package" value="org.apache.cordova.dialogs.Notification" /> 
    </feature> 
    <feature name="FileTransfer"> 
     <param name="android-package" value="org.apache.cordova.filetransfer.FileTransfer" /> 
    </feature> 
    <feature name="Geolocation"> 
     <param name="android-package" value="org.apache.cordova.geolocation.Geolocation" /> 
    </feature> 
    <feature name="Globalization"> 
     <param name="android-package" value="org.apache.cordova.globalization.Globalization" /> 
    </feature> 
    <feature name="InAppBrowser"> 
     <param name="android-package" value="org.apache.cordova.inappbrowser.InAppBrowser" /> 
    </feature> 
    <feature name="Media"> 
     <param name="android-package" value="org.apache.cordova.media.AudioHandler" /> 
    </feature> 
    <feature name="NetworkStatus"> 
     <param name="android-package" value="org.apache.cordova.networkinformation.NetworkManager" /> 
    </feature> 
    <feature name="SplashScreen"> 
     <param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen" /> 
     <param name="onload" value="true" /> 
    </feature> 
    <feature name="StatusBar"> 
     <param name="android-package" value="org.apache.cordova.statusbar.StatusBar" /> 
     <param name="onload" value="true" /> 
    </feature> 
    <feature name="Vibration"> 
     <param name="android-package" value="org.apache.cordova.vibration.Vibration" /> 
    </feature> 
    <feature name="Whitelist"> 
     <param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" /> 
     <param name="onload" value="true" /> 
    </feature> 
    <feature name="AndroiDiamond"> 
     <param name="android-package" value="com.androidiamond.AndroiDiamond" /> 
    </feature> 
    <feature name="FileOpener2"> 
     <param name="android-package" value="io.github.pwlin.cordova.plugins.fileopener2.FileOpener2" /> 
    </feature> 
    <icon density="ldpi" src="www/res/icon/android/drawable-ldpi-icon.png" /> 
    <icon density="mdpi" src="www/res/icon/android/drawable-mdpi-icon.png" /> 
    <icon density="hdpi" src="www/res/icon/android/drawable-hdpi-icon.png" /> 
    <icon density="xhdpi" src="www/res/icon/android/drawable-xhdpi-icon.png" /> 
    <icon density="xxhdpi" src="www/res/icon/android/drawable-xxhdpi-icon.png" /> 
    <icon density="xxxhdpi" src="www/res/icon/android/drawable-xxxhdpi-icon.png" /> 
    <splash density="land-ldpi" src="www/res/screen/android/drawable-land-ldpi-screen.png" /> 
    <splash density="land-mdpi" src="www/res/screen/android/drawable-land-mdpi-screen.png" /> 
    <splash density="land-hdpi" src="www/res/screen/android/drawable-land-hdpi-screen.png" /> 
    <splash density="land-xhdpi" src="www/res/screen/android/drawable-land-xhdpi-screen.png" /> 
    <splash density="land-xxhdpi" src="www/res/screen/android/drawable-land-xxhdpi-screen.png" /> 
    <splash density="land-xxxhdpi" src="www/res/screen/android/drawable-land-xxxhdpi-screen.png" /> 
    <splash density="port-ldpi" src="www/res/screen/android/drawable-port-ldpi-screen.png" /> 
    <splash density="port-mdpi" src="www/res/screen/android/drawable-port-mdpi-screen.png" /> 
    <splash density="port-hdpi" src="www/res/screen/android/drawable-port-hdpi-screen.png" /> 
    <splash density="port-xhdpi" src="www/res/screen/android/drawable-port-xhdpi-screen.png" /> 
    <splash density="port-xxhdpi" src="www/res/screen/android/drawable-port-xxhdpi-screen.png" /> 
    <splash density="port-xxxhdpi" src="www/res/screen/android/drawable-port-xxxhdpi-screen.png" /> 
    <allow-intent href="market:*" /> 
    <name>poc1</name> 
    <description> 
     Hello World sample application that responds to the deviceready event. 
    </description> 
    <author email="[email protected]" href="http://phonegap.com"> 
     PhoneGap Team 
    </author> 
    <content src="index.html" /> 
    <preference name="DisallowOverscroll" value="true" /> 
    <preference name="android-minSdkVersion" value="14" /> 
    <icon src="icon.png" /> 
    <access origin="*" /> 
    <allow-intent href="http://*/*" /> 
    <allow-intent href="https://*/*" /> 
    <allow-intent href="tel:*" /> 
    <allow-intent href="sms:*" /> 
    <allow-intent href="mailto:*" /> 
    <allow-intent href="geo:*" /> 
</widget> 
+0

'config.xml '을 게시하면 누구나 유용한 답을 줄 수 있습니다. – lifeisfoo

+0

@lifeisfoo, 게시했습니다. config xml에 Geolocation 기능이 있습니다. 그 밖의 무엇을 넣어야합니까? – shamaleyte

+0

cordova 또는 phonegap을 사용하고 있으며 버전은 무엇입니까? 게시 한 링크에서 phonegap 2.9 인 것 같습니다. – lifeisfoo

답변

0

는 허가 시스템에 약간의 변화가 있었다.

+0

나는 그것을 알고 있지만 어떻게 코도 바와 같이 할 수 있습니까? – shamaleyte

2

Phonegap Build 문서에 제공 한 링크는 v2.9.0이며 실제로 오래된 버전입니다. latest documentation을 확인하면 the feature tag has been deprecated이 표시됩니다. <feature>은 AndroidManifest.xml에만 권한을 추가합니다.이 권한은 Android M 런타임 권한을 사용하기에 충분하지 않습니다. 표시된대로 <feature> 태그를 해당 plugins으로 대체해야합니다. 여기에는 Android M 런타임 권한 요청을 적절하게 처리하는 코드도 포함되어 있습니다.

따라서, 예를 들어, 대체 :

<feature name="Geolocation"> 
    <param name="android-package" value="org.apache.cordova.geolocation.Geolocation" /> 
</feature> 

과 :

<plugin name="cordova-plugin-geolocation" spec="*"/> 

당신은 또한 폰갭은 폰갭 CLI의 V6.1.0을 사용하는 빌드 지시합니다 <preference name="phonegap-version" value="cli-6.1.0" />을 추가 할 것입니다. 이는 CLI 버전이 앱을 빌드 할 플랫폼 버전에 영향을주기 때문에 Android M 런타임 권한에 중요합니다. 안드로이드 M 지원은 안드로이드 플랫폼 v5에서만 추가되었지만, current default for Phonegap Build은 CLI v5.2.0이며, 안드로이드 플랫폼 v4.1.1로 기본 설정되어 있습니다.

+0

Dave에게 감사의 말을 전하지 만, 기능 태그에는 Phonegap 빌드 명령이 자동으로 제공됩니다. (PhoneGap 버전 : 6.2.6). 여기에 주어진 바와 같이, feature tag는 사용 된 것으로 주어집니다; http://docs.phonegap.com/en/edge/cordova_geolocation_geolocation.md.html.내가 만드는 실수는 자바 스크립트 부분에서 geolocation 플러그인이라고 부르는 방식입니다. 적절한 호출은 사용자에게 허가를 요청하는 프롬프트 메시지를 활성화합니다! 그래도 고마워. – shamaleyte

+0

'버전 3.0부터 Cordova는 장치 레벨 API를 플러그인으로 구현합니다. 명령 행 인터페이스에 설명 된 CLI의 플러그인 명령을 사용하여 프로젝트에이 기능을 추가 또는 제거하십시오. 또한 ''이 아닌 ''을 사용하면 사용중인 플러그인 버전을 제어 할 수 없습니다. 즉, '입니다. – DaveAlden

+0

데이브, 혼란 스러워요. CLI를 통해 플러그인을 추가했고 build 명령은 context.xml을 기능 태그로 가득 채웠습니다. 따라서 귀하의 성명서에서 이러한 기능 태그를 플러그인 태그로 대체해야한다고 생각합니까? – shamaleyte