2016-10-17 25 views
2

私はXamarin.Formsでクロスプラットフォームアプリケーションを構築しています。 コンテンツについては、JSONを返すAPIへの非同期呼び出しを使用します。 だから私はインターネットのアクセス許可が必要です。その連絡先コードAPIのXamarinフォームはインターネット許可を要求しますPCLのAndroid 6

例:

var data = await wc.GetStringAsync("http://website.for.content/content-api/Category/?format=json"); 

この行は、Androidマニフェストである:

<uses-permission android:name="android.permission.INTERNET" /> 

私はアプリケーションのために書いたすべてのコードは、ポータブルクラスライブラリです。だから私はまだプラットフォーム固有のコードを持っていない(まだ)。

ポータブルクラスライブラリからインターネットのアクセス許可を確認し、要求するにはどうすればよいですか?

答えて

2

NormalDangerous権限がありますが、Internetアクセスが通常の許可であり、したがってのみのインストールのために、アプリケーションのマニフェストで定義する必要があり、実行時に自動的に付与されています。

通常の権限は、アプリのサンドボックス外のデータやリソースにアクセスする必要がある領域ですが、ユーザーのプライバシーや他のアプリケーションの操作にはほとんど影響しません。たとえば、タイムゾーンを設定する権限は通常の許可です。アプリは、それは通常の許可が必要であることを宣言した場合、システムが自動的にアプリに許可を与える

参考:あなたは何をチェックする必要があることは許可されていることを確認しhttps://developer.android.com/guide/topics/security/normal-permissions.html

1

ていますか?パーミッションは、ユーザがアプリケーションをインストールする前に、ユーザが必要とする静的で宣言的なものです。アプリの権限を変更することはできません。アプリを更新しないと、ユーザーからの明示的な承諾が得られません。だから、パーミッションの背後にある論理は、単純なことである:あなたのアプリケーションは、そのマニフェストに

<uses-permission android:name="android.permission.INTERNET" /> 

を持っており、アプリは、ユーザーがアプリの要件を受け入れたことを確認することができます実行されている場合。あなたがSDK 23以上(アンドロイド6.0以上)のためのアプリ、アプリをターゲットとする場合には

dangerous許可をしたい、あなたはrequest permissions in run-timeにする必要がありますが:

// thisActivityが現在の活動であると仮定は、 int permissionCheck = ContextCompat.checkSelfPermission(thisActivity、 Manifest.permission.WRITE_CALENDAR);

とにかく実行時には、アクセス許可とは関係のないインターネットアクセスの可用性を確認することができます。 How to check internet access on Android:そのここでルック有するため

をパブリックブールisOnline(){ ConnectivityManager CM = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE)。 NetworkInfo netInfo = cm。getActiveNetworkInfo(); return netInfo!= null & & netInfo.isConnectedOrConnecting(); }

コードはAndroid固有であり、PCLに入れることはできません。したがって、PCLで宣言されたインターフェースとAndroid固有の実装が必要になります。

+0

「アプリの権限は変更できません」とはどういう意味ですか? Android 6には実行時の権限がありますか? – 476rick

+0

@ 476rickがAndroid 6用に更新されました –

0

私の解決策は、私のMainActivityにいた私は、Xzingのバーコードスキャナを使用しようとしているカメラの権限で、この問題を持っていた(もちろん、それは他の権限に助けることができる):

:FormsAppCompatActivityのOnCreate(バンドルバンドル)は、このコードを追加
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M) 
     { 
      int mycode = 0; 
      Android.Support.V4.App.ActivityCompat.RequestPermissions(this, new String[] { Manifest.Permission.Camera }, mycode); 
     }  

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults) 
    {    

     ZXing.Net.Mobile.Forms.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
関連する問題