我正在用Xamarin.Forms构建一个跨平台的应用程序。对于内容,我使用一个对API的异步调用,该API返回JSON。所以我需要网络许可。
与API联系的代码示例:
var data = await wc.GetStringAsync("http://website.for.content/content-api/Category/?format=json");这一行出现在Android宣言中:
<uses-permission android:name="android.permission.INTERNET" />我为应用程序编写的所有代码都在一个可移植类库中。所以我还没有任何特定于平台的代码。
如何从可移植类库检查和请求internet权限?
发布于 2016-10-17 14:36:02
有Normal和Dangerous权限,Internet访问是正常权限,因此只需要在应用程序的清单中为安装目的定义并在运行时自动授予。
正常权限包括应用程序需要访问应用程序沙箱之外的数据或资源的区域,但对用户的隐私或其他应用程序的操作风险很小。例如,设置时区的权限是正常权限。如果应用程序声明需要正常权限,系统将自动将该权限授予应用程序。
参考文献:https://developer.android.com/guide/topics/security/normal-permissions.html
发布于 2016-10-17 14:39:14
你确定你需要检查的是许可吗?权限是用户在安装应用程序之前需要从用户那里获得的静态声明性的东西。如果不更新应用程序并因此得到用户的明确接受,则无法更改App权限。所以权限背后的逻辑很简单:如果您的应用程序
<uses-permission android:name="android.permission.INTERNET" />在它的清单和应用正在运行,然后您可以确保用户已经接受了应用程序的要求。
如果您针对SDK23或更高版本的应用程序(Android6.0或更高版本)而您的应用程序需要危险权限,则需要在运行时请求权限
//假定thisActivity是当前活动int permissionCheck = Manifest.permission.WRITE_CALENDAR);
无论如何,在运行时,您可能愿意检查与权限无关的internet访问的可用性。
要做到这一点,请看这里:如何检查Android上的internet访问
公共布尔值getSystemService(Context.CONNECTIVITY_SERVICE);isOnline() { ConnectivityManager cm = (ConnectivityManager) NetworkInfo netInfo = cm.getActiveNetworkInfo();返回netInfo != null & netInfo.isConnectedOrConnecting();}
请注意,代码是Android特定的,不能放入PCL中。因此,您将需要一个PCL声明的界面和一个特定于Android的实现。
发布于 2016-12-01 15:13:43
在试图使用xzing条形码扫描仪(当然,它在任何其他权限中都有帮助)时,我遇到了这个问题,我的解决方案是在我的MainActivity : 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);
}https://stackoverflow.com/questions/40088777
复制相似问题