【问题标题】:Xamarin Android AndroidX.Core.Content.FileProvider.GetUriForFile NullReferenceExceptionXamarin 安卓 AndroidX.Core.Content.FileProvider.GetUriForFile NullReferenceException
【发布时间】:2022-11-21 15:09:57
【问题描述】:

嗨,我在安装下载的 APK 文件时遇到了这样的问题

有它出现的代码系统.NullReferenceException:'你调用的对象是空的。'

var file = new Java.IO.File(filePath);
if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.N)
{
    System.Diagnostics.Debug.WriteLine(MainActivity.Instance.ApplicationContext.PackageName + ".fileProvider");
//thats were error occures
    Uri apkUri = AndroidX.Core.Content.FileProvider.GetUriForFile(MainActivity.Instance,
        MainActivity.Instance.ApplicationContext.PackageName + ".fileProvider", file);
    Intent intentS = new Intent(Intent.ActionInstallPackage);
    intentS.SetData(apkUri);
    intentS.SetFlags(ActivityFlags.GrantReadUriPermission);
    MainActivity.Instance.StartActivity(intentS);
}

和我的主要活动

 [Activity(Label = "Dyspozycja Rewizor",
        Icon = "@mipmap/icon",
        Theme = "@style/MainTheme",
        MainLauncher = true,
        //Name ="Dysp.Rew.MainActivity",
        ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)]
    [ContentProvider(
        new[] { "${applicationId}.provider" },
        Name = "AndroidX.Core.Content.FileProvider",
        Exported = false,
        GrantUriPermissions = true)]
    [MetaData(
        "android.support.FILE_PROVIDER_PATHS",
        Resource = "@xml/file_paths")]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        internal static MainActivity Instance { get; private set; }

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Instance = this;
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

            DependencyService.Register<IInstallerService, InstallerService>();

            LoadApplication(new App());
        }
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions,
            [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

并且有几天我无法弄清楚发生了什么。 我试图通过添加来编辑 AndroidManifest.xml

<application android:debuggable="true" android:label="Dyspozycja Rewizor">
    <provider android:name="androidx.core.content.FileProvider"
                    android:authorities="${applicationId}.provider"
                    android:exported="false"
                    android:grantUriPermissions="true">
      <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
    </provider>
  </application>

和我的 file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
  <files-path name="my_docs" path="docs/"/>
  <external-path name="external_files" path="."/>
</paths>

我试图通过 Attribute 或 AndroidManifest 添加 fileprovider 但都不起作用 也试过

 Intent intent = new Intent(Intent.ActionView);
 intent.SetDataAndType(Uri.FromFile(new Java.IO.File(filePath)), "application/vnd.android.packagearchive");
 intent.SetFlags(ActivityFlags.NewTask); 
 // in this line exception occures
 MainActivity.Instance.StartActivity(intent);

有人可以帮忙吗? 提前致谢

【问题讨论】:

    标签: c# xamarin.android nullreferenceexception android-fileprovider android-intentservice


    【解决方案1】:

    一般NullReferenceException exception的总结如下:

    1. 对象所在的命名空间没有引用。
    2. 对象未实例化。
    3. 出现异常,实例化失败对象为null。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      相关资源
      最近更新 更多