私はaltbeaconライブラリを使用してビーコンを監視し、範囲指定しています。私はあなたの要求しているアクセス許可のページを読んで、知っておきたいのは、API 23+()の位置情報のアクセス許可をターゲットにすると、API < 23のデバイスでスキャンが行われるのですか?私は実際のデバイスを持っていないので、それをテストすることはできません。または、23歳未満のAPIを使用しているデバイスでロケーション権限をリクエストしない方法はありますか?あなたの答えをありがとうロケーションターゲットの許可23
答えて
コア疑問修正再表示:あなたはminSdkVersionが< 23を持っているアプリが、targetSdkVersion> = 23を構築する場合
を、あなたはbluetoothのビーコンをスキャンしようとすると何が起こりますか?
短い答え:うまくいきます。
長い答えは:
ユーザー権限要求は発生しません。とminSdkVersion < 23、コンパイラは、以前のAndroidバージョンでは実行されないため、
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
のようなコード行を含めないようにします。if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
のようなifステートメントでラップすると、実行されません。@SuppressLint("NewApi")
のようなアノテーションを追加すると、コードを実行しようとするとアプリがクラッシュします。ビーコンのスキャンは、ユーザーのアクセス許可が与えられていないという事実にかかわらず、前景と背景の両方でを実行します。それ以前のAndroidバージョンはユーザーからの許可を要求することができないため、アプリケーションは許可されているかのように動作します。
ありがとう、これは私が探していた答えです! –
Android 23以降では、アプリケーションに「危険な」アクセス権が与えられているかどうかを確認し、ユーザーに尋ねない場合はチェックする必要があります。
Androidサポートライブラリにはこのためのヘルパー機能があります。
Requesting Permissions at Run Timeを参照してください。 主な機能はcheckSelfPermission
とrequestPermissions
です。あなたはマシュマロを実行しているデバイス上にある場合、これはtrue
を返します
public static boolean isMNC() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
:アンドロイドの古いバージョンに問題がないようにするため、あなたがマシュマロかを実行しているデバイス上にあるかどうかをチェックするために、以下を使用することができて
それ以外の場合はfalse
です。したがって、これがtrue
を返す場合は、許可を確認し、そうでない場合は許可しないでください。
checkSelfPermission
とrequestPermissions
という名前の関数では、注釈@SuppressLint("NewApi")
を使用してください。
に基づいて:[リンク](https://altbeacon.github.io/android-beacon-library/requesting_permission.html)私は、ライブラリがスキャンビーコンを実行するかどうかはわかりませんが、アクセス許可はAPI 23+のみです。それは私が求めているものです:D –
Androidビーコンライブラリ2.9.1のAndroidManifestを見ると、ACCESS_COARSE_LOCATION権限を含めるために以下を使用します:
なぜ仮想デバイスを使用してテストを行っていないのですか?すべてのAPIが利用可能です。情報のためだけに、API 23は許可の大きな変更を行いました。許可は実行時にチェックする必要があります。その前に、マニフェストを使用してブロックする必要はありません。 – AxelH
仮想デバイスはBluetoothを使用できません。ビーコンをスキャンする必要があります。 –
私の悪いが、コメントの残りの部分はまだ立っています。あなたは前の23のために異なって、そして残りを管理する必要があります。 – AxelH