Xamarin Android AndroidX.Core.Content.FileProvider.GetUriFor



我在安装下载的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);
}

和我的MainActivity

[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>

我试图通过属性或AndroidManifest添加文件提供程序,但两者都不起作用也试过

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);

有人能帮帮我吗?提前感谢

<<p>解决方案/strong>我还没有在android manifest 中看到另一个应用实例
<application android:label="JakubStegienko.rewizor" android:theme="@style/MainTheme" android:icon="@mipmap/icon"></application>

一般NullReferenceException exception的概要如下:

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

相关内容

最新更新