0

Android M(6)をサポートするためにアプリケーションをアップグレードしましたが、Android 6のアクセス許可に関する要件を認識していても克服できない問題があります23)。Android M(API 23) - Phonegapアクセス許可の問題

私は(as far as I see) ACCESS_COARSE_LOCATIONとACCESS_FINE_LOCATION権限を提供することになっている場所でのジオロケーションプラグイン、とのPhoneGap 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) 

私が得ることのできない1つのことは、ユーザーに許可を与えるように頼んでいるはずです。それはプラグイン、ジオロケーションの仕事ではありませんか?

PS:アプリケーション設定から手動で「ジオロケーション」権限を与えると、すべて正常に機能します。

私は自分のconfig.xmlにジオロケーション機能を持っています。

チェック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にジオロケーション機能を持っています。他に何を置くべきですか? – shamaleyte

+0

コードバまたは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に置き換える必要があります。pluginsには、必要に応じてAndroid Mランタイムのアクセス許可を処理するコードも含まれています。

ので、例えば、交換してください:

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

と:

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

あなたはまた、PhoneGapのは、PhoneGapのCLIのV6.1.0を使用するように構築するよう指示します<preference name="phonegap-version" value="cli-6.1.0" />を追加したくなるでしょう。 CLIのバージョンは、アプリケーションをビルドするプラットフォームのバージョンに影響するため、これはAndroid Mランタイムのアクセス許可にとって重要です。アンドロイドMサポートはAndroidプラットフォームv5にのみ追加されましたが、current default for Phonegap BuildはCLI v5.2.0です。デフォルトではAndroidプラットフォームv4.1.1

+0

Daveさんに感謝しますが、機能タグにはPhonegap buildコマンドが自動的に付属しています。 (PhoneGapのバージョンは6.2.6です)。ここで与えられているように、特徴タグも使用されている。 http://docs.phonegap.com/en/edge/cordova_geolocation_geolocation.md.html間違いは、私がjavascriptの部分からgeolocationプラグインを呼び出す方法です。適切な呼び出しによって、ユーザに許可を求めるプロンプトメッセージが表示されます。しかし、ありがとう。 – shamaleyte

+0

'バージョン3.0以降、CordovaはプラグインとしてデバイスレベルのAPIを実装しています。コマンドラインインターフェイスで説明されているCLIのプラグインコマンドを使用して、この機能をプロジェクトに追加または削除します。また、 ''を使用し、 ' 'を使用しない場合は、使用しているプラ​​グインのバージョン、つまり'を制御することはできません。 – DaveAlden

+0

デイブ、私は混乱しています。私はCLIを使ってプラグインを追加し、ビルドコマンドはcontext.xmlに機能タグをいっぱいにします。だから私はあなたの声明から、これらの機能タグをプラグインタグに置き換える必要があることを理解しています。 – shamaleyte

関連する問題