从 Xamarin Forms 安装 APK
Install APK from Xamarin Forms
我想在 VS2019 中使用 FileProvider 从存储目录安装 APK 文件 - .Net Standard2.1 和 Target Framework API28 for Android。但是我得到了错误 "The name 'FileProvider' does not exist in the current context".
即使我尝试更改 .Net 2.0 也有同样的错误。
Java.IO.File file = new Java.IO.File(filepath);
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
Android.Net.Uri URIAPK = FileProvider.GetUriForFile(Android.App.Application.Context, Android.App.Application.Context.ApplicationContext.PackageName + ".provider", filepath);
Intent intS = new Intent(Intent.ActionInstallPackage);
intS.SetData(URIAPK);
intS.SetFlags(ActivityFlags.GrantReadUriPermission);
Android.App.Application.Context.StartActivity(intS);
}
else
{
Android.Net.Uri URIAPK = Android.Net.Uri.FromFile(filepath);
Intent intS = new Intent(Intent.ActionView);
intS.SetDataAndType(URIAPK, "application/vnd.android.package-archive");
intS.SetFlags(ActivityFlags.NewTask);
Android.App.Application.Context.StartActivity(intS);
}
我尝试使用命名空间 "Using Android.v4.content.FileProvider;"
仍然出错,因为缺少 .dll 所以,当我要安装时 Xamarin.Android.Support.Compat Nuget 遇到抑制错误
NU1202 Package Xamarin.Android.Support.Compat 28.0.0.3 is not
compatible with netstandard2.1 (.NETStandard,Version=v2.1). Package
Xamarin.Android.Support.Compat 28.0.0.3 supports:
- monoandroid60 (MonoAndroid,Version=v6.0)
- monoandroid70 (MonoAndroid,Version=v7.0)
- monoandroid71 (MonoAndroid,Version=v7.1)
- monoandroid80 (MonoAndroid,Version=v8.0)
- monoandroid81 (MonoAndroid,Version=v8.1)
- monoandroid90 (MonoAndroid,Version=v9.0)
给我安装 APK 文件的解决方案或任何其他方法。
But I got the error "The name 'FileProvider' does not exist in the
current context"
这个错误,请参考正确的包。一般建议使用最新的nuget Xamarin.AndroidX.AppCompat
在代码中,我们应该按如下方式导入这个 nuget:
using AndroidX.AppCompat.App;
using AndroidX.Core.Content;
FileProvider
的总代码应该是:
Android.Net.Uri URIAPK = AndroidX.Core.Content.FileProvider.GetUriForFile(Android.App.Application.Context, Android.App.Application.Context.ApplicationContext.PackageName + ".provider", filepath);
在这种情况下,错误“名称 'FileProvider' 在当前上下文中不存在”将消失。
如果你想使用最新的nuget Xamarin.AndroidX.AppCompat
,你应该将你的应用程序迁移到AndroidX,更多信息,你可以查看文档:https://docs.microsoft.com/en-us/xamarin/android/platform/androidx#migration-tooling .
此外,记得添加正确的附加配置文件以遵守新的严格模式:
(AndroidX) 将以下内容添加到 <application>
标签内的 AndroidManifest.xml 中:
<provider android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"></meta-data>
</provider>
有关更多信息,请查看:https://github.com/jamesmontemagno/MediaPlugin#android-file-provider-setup。
注:
我们强烈建议您升级到最新的 Visual Studio 并默认使用较新的 Nugets 以避免迁移和兼容性问题。
我想在 VS2019 中使用 FileProvider 从存储目录安装 APK 文件 - .Net Standard2.1 和 Target Framework API28 for Android。但是我得到了错误 "The name 'FileProvider' does not exist in the current context".
即使我尝试更改 .Net 2.0 也有同样的错误。
Java.IO.File file = new Java.IO.File(filepath);
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
Android.Net.Uri URIAPK = FileProvider.GetUriForFile(Android.App.Application.Context, Android.App.Application.Context.ApplicationContext.PackageName + ".provider", filepath);
Intent intS = new Intent(Intent.ActionInstallPackage);
intS.SetData(URIAPK);
intS.SetFlags(ActivityFlags.GrantReadUriPermission);
Android.App.Application.Context.StartActivity(intS);
}
else
{
Android.Net.Uri URIAPK = Android.Net.Uri.FromFile(filepath);
Intent intS = new Intent(Intent.ActionView);
intS.SetDataAndType(URIAPK, "application/vnd.android.package-archive");
intS.SetFlags(ActivityFlags.NewTask);
Android.App.Application.Context.StartActivity(intS);
}
我尝试使用命名空间 "Using Android.v4.content.FileProvider;"
仍然出错,因为缺少 .dll 所以,当我要安装时 Xamarin.Android.Support.Compat Nuget 遇到抑制错误
NU1202 Package Xamarin.Android.Support.Compat 28.0.0.3 is not compatible with netstandard2.1 (.NETStandard,Version=v2.1). Package Xamarin.Android.Support.Compat 28.0.0.3 supports:
- monoandroid60 (MonoAndroid,Version=v6.0)
- monoandroid70 (MonoAndroid,Version=v7.0)
- monoandroid71 (MonoAndroid,Version=v7.1)
- monoandroid80 (MonoAndroid,Version=v8.0)
- monoandroid81 (MonoAndroid,Version=v8.1)
- monoandroid90 (MonoAndroid,Version=v9.0)
给我安装 APK 文件的解决方案或任何其他方法。
But I got the error "The name 'FileProvider' does not exist in the current context"
这个错误,请参考正确的包。一般建议使用最新的nuget Xamarin.AndroidX.AppCompat
在代码中,我们应该按如下方式导入这个 nuget:
using AndroidX.AppCompat.App;
using AndroidX.Core.Content;
FileProvider
的总代码应该是:
Android.Net.Uri URIAPK = AndroidX.Core.Content.FileProvider.GetUriForFile(Android.App.Application.Context, Android.App.Application.Context.ApplicationContext.PackageName + ".provider", filepath);
在这种情况下,错误“名称 'FileProvider' 在当前上下文中不存在”将消失。
如果你想使用最新的nuget Xamarin.AndroidX.AppCompat
,你应该将你的应用程序迁移到AndroidX,更多信息,你可以查看文档:https://docs.microsoft.com/en-us/xamarin/android/platform/androidx#migration-tooling .
此外,记得添加正确的附加配置文件以遵守新的严格模式:
(AndroidX) 将以下内容添加到 <application>
标签内的 AndroidManifest.xml 中:
<provider android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"></meta-data>
</provider>
有关更多信息,请查看:https://github.com/jamesmontemagno/MediaPlugin#android-file-provider-setup。
注:
我们强烈建议您升级到最新的 Visual Studio 并默认使用较新的 Nugets 以避免迁移和兼容性问题。