2016-10-19 11 views
1

アプリをインストールした後にユーザーに許可を求めます。Androidでランタイムパーミッションをうまく適用するには?

現在のAPI(7.0)からAPIレベル19(4.4)への実行時アクセス権を要求することはできますか?

私はドキュメントを読みましたが、多くの例を試しました。 すべてが複雑すぎるように見えますし、プラグインが権限を要求するのを見たこともあります。

ドキュメントは、いくつかのNuGetパッケージをusign例を提供します。 https://developer.xamarin.com/samples/monodroid/android-m/RuntimePermissions/

しかし、それは上記のみのAndroid M(6.0 APIレベル23)で動作します...

それについてのこの記事会談: https://blog.xamarin.com/requesting-runtime-permissions-in-android-marshmallow/

は例えば、私の場合、私はアプリが「許可CAMERA」を持っていない場合は、ユーザーのためにこのような何かを求めるかどうかを確認したいです

if (Android.Support.V4.Content.ContextCompat.CheckSelfPermission(this, Manifest.Permission.Camera) != (int)Permission.Granted) { 
    // Permission has never been accepted 
    // So, I ask the user for permission 
    ActivityCompat.RequestPermissions(this, new String[] { Manifest.Permission.Camera }, REQUEST_CAMERA); 
} else { 
    // Permission has already been accepted previously 
} 

何も表示せずにアプリケーションが開きます。 チェックは機能しますが、 "RequestPermissions"はユーザーに何も質問しません。

  1. 何も表示しないでください。
  2. Mより前のバージョンでも動作しないのであれば、なぜ "ActivityCompat"を使用する必要がありますか?

は、誰も私(Mより前のバージョンとの互換性)簡単なコードからランタイム許可を要求する例を与えることができますか?

+1

誰も回答していないので、コード例を与えることはできませんが、少なくともバックグラウンドはありません。 Mより前のバージョンのデバイスでは、ユーザーは権限を取り消すことができません。これらはインストール時に自動的に付与されます。したがって、 'ContextCompat.CheckSelfPermission()'は常にtrueを返します。残念ながら、たとえユーザーが権限を取り消したとしても、targetSDK 0X0nosugar

+0

私はこの回答をhttp: /stackoverflow.com/questions/40116612/android-6-0-1-permission-issue-wifimanager-getscanresults-returns-0/40116740?noredirect=1#comment67542054_40116740 and http://stackoverflow.com/questions/36027167/android -run-time-permissions-in-android-6-0-api-level-23-best-practices –

答えて

0

私はあなたと同じ結果を得ましたので、少し調査しました。あなたは2つの場所で権限を設定しなければならないというトリックです。 1.マニフェスト内 2.実行時にアクセス許可を要求する ここに示すように、https://developer.android.com/training/permissions/requesting.html は結果が異なります。

すべてのバージョンのAndroidでは、アプリケーションマニフェストに必要な通常のアクセス許可と危険なアクセス許可の両方を宣言する必要があります(「アクセス許可の宣言」を参照)。ただし、その宣言の効果は、システムのバージョンとアプリのターゲットSDKレベルによって異なります。

デバイスがAndroid 5.1以下、またはアプリのターゲットSDKが22以下を実行している場合:危険なあなたのマニフェストの許可を得るには、ユーザーはアプリケーションのインストール時に許可を与えなければなりません。彼らが許可を与えない場合、システムはアプリケーションをまったくインストールしません。 デバイスがAndroid 6.0以降を実行し、アプリのターゲットSDKが23以上の場合:アプリはにマニフェストのパーミッションを、そしてはアプリケーションの実行中に必要な危険なアクセス権をそれぞれ要求する必要があります。ユーザーは各権限を付与または拒否することができ、ユーザーが権限要求を拒否しても機能は制限されたままアプリケーションを実行し続けることができます。

0

Android 6.0(API 23 - Marshmallow)にランタイムパーミッションが導入されました。そのため、23より低いAndroid APIでランタイムパーミッションをプログラムで設定することはできません。ご質問にリンクされているRequesting Runtime Permissions in Android Marshmallowガイドが役に立つと思われます。Check the SDK Versionセクションには、APIレベルをチェックし、23より前のAPIレベルでランタイムアクセス許可ワークフローが呼び出されないようにするロジックが示されています。

以前のAPIレベルが22以上の場合は、ガイドに記載されているように、AndroidManifest.xmlにインストール時のアクセス許可を追加する必要があります。

関連する問題