【发布时间】: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