【问题标题】:Xamarin.Android Internet PermissionXamarin.Android Internet 权限
【发布时间】:2016-10-04 01:23:59
【问题描述】:

我正在使用 Visual Studio 2015,最低 SDK 版本 14。 我到处读到,在构建发布版本后,您需要在清单中指定互联网权限。 (虽然有些人说只有在你的 android 版本低于 x 版本时才需要它)。

这是我的清单的摘录:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application android:label="<app name>" android:icon="@drawable/icon"></application>

问题是,当直接从 Visual 构建并运行到我的设备时,我无法从我的应用程序访问互联网。

在设备的应用程序管理器中,我可以看到分配给我的应用程序的权限如下(无论是从 Visual Studio 部署还是从 Google Play 安装):
- 修改或删除 USB 的内容存储
- 完全网络访问权限
- 查看网络连接

另一方面,在将应用程序上传到 Goolge Play(alpha 测试)时,当我在手机中单击安装时,显示应用程序将要使用的权限的弹出窗口显示它需要的是“访问照片/媒体/文件”

[编辑] 我的应用程序访问互联网的方式是通过 PCL 项目。 基本上,这是执行(或不执行)所有魔法的代码块。

        try
        {
            if (CheckIfThereIsConnection())
            {
                HttpWebRequest request = WebRequest.Create(urlRequest) as HttpWebRequest;
                request.Headers[HttpRequestHeader.Authorization] = "my token here";

                using (WebResponse response = await request.GetResponseAsync())
                {
                    using (Stream stream = response.GetResponseStream())
                    {
                        StreamReader reader = new StreamReader(stream);

                        string line = string.Empty;
                        StringBuilder sb = new StringBuilder();

                        while ((line = reader.ReadLine()) != null)
                        {
                            sb.Append(line);
                        }

                        T deserializedObject = JsonConvert.DeserializeObject<T>(sb.ToString());

                        return deserializedObject;
                    }
                }

            }
        }
        catch (Exception ex)
        {
            throw new Exception("My custom Exception", ex.InnerException);
        }

我到处找都没有运气。有人可以为我提供进一步详细的解释,或者指出一些文件让我看看吗?

【问题讨论】:

  • INTERNETWRITE_EXTERNAL_STORAGEDebug 配置中默认启用。您必须在 Release 配置中明确指定这些。 developer.xamarin.com/guides/android/advanced_topics/… |您能否详细介绍从您的应用程序访问互联网的问题?您使用什么代码访问互联网?
  • @JonDouglas 是的,我知道这一点。这就是我将这些设置添加到清单的原因。我会尽快发布我如何访问互联网的详细信息,即使它在调试模式下工作正常,所以我想应该没问题。
  • 我们需要具体的证据来帮助诊断这个问题。当您从Debug 或 Google Play 安装您的应用程序时,请转到设置 -> 应用程序 -> 选择您的应用程序 -> 权限。显示的确切权限的屏幕截图或文本会有所帮助!
  • @JonDouglas 我已经编辑了我的问题
  • 您是否从完全卸载应用程序并尝试Debug 和 Google Play 中看到相同的权限?查看Debug 构建是否因Don't Link 以外的其他链接选项而失败。

标签: android visual-studio xamarin


【解决方案1】:

您很可能会遇到Linker 剥离应用程序所需内容的问题。我强烈建议您在此处查看我们关于此主题的文档:

https://developer.xamarin.com/guides/android/advanced_topics/linking/#Linker_Behavior

然后您可以尝试使用linkskip (https://developer.xamarin.com/guides/android/advanced_topics/linking/#linkskip) 或自定义链接器配置文件 (https://developer.xamarin.com/guides/cross-platform/advanced/custom_linking/) 来确保您的程序集包含在您的最终包中。

【讨论】:

  • 确实是链接器有问题。仅切换到 Sdk 程序集就可以了。无论哪种方式,我都会检查提供的链接以避免遗漏一些链接。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-09-27
  • 2022-01-18
  • 2014-09-27
  • 2011-02-11
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多