【发布时间】:2021-08-15 03:37:17
【问题描述】:
我有以下用于导出 Excel 文件的代码。最终结果在 Excel 应用程序中打开。这是打开文件的代码:
if (file.Exists())
Intent intent = new Intent(Intent.ActionView);
if (Build.VERSION.SdkInt < BuildVersionCodes.N)
{
intent.SetDataAndType(Android.Net.Uri.FromFile(file), MimeTypeMap.Singleton.GetMimeTypeFromExtension(MimeTypeMap.GetFileExtensionFromUrl(Android.Net.Uri.FromFile(file).ToString())));
}
else
{
intent.AddFlags(ActivityFlags.GrantReadUriPermission);
intent.SetDataAndType(Android.Net.Uri.Parse(file.Path), MimeTypeMap.Singleton.GetMimeTypeFromExtension(MimeTypeMap.GetFileExtensionFromUrl(Android.Net.Uri.FromFile(file).ToString())));
}
context.StartActivity(Intent.CreateChooser(intent, context.GetString(Resource.String.LblChooseApp)));
}
我知道文件已创建,因为我没有收到任何错误并且正确地到达了这一点。另外,我已经添加了标志FLAG_GRANT_READ_URI_PERMISSION/GrantReadUriPermission,当我尝试打开文件时,我收到以下消息:
无法打开文件 |尝试将文件保存在设备上,然后打开 它
这是我的 AndroidManifest.xml 的一部分
<application android:theme="@style/Launcher" android:icon="@drawable/icon" android:label="@string/app_name" android:requestLegacyExternalStorage="true">
<activity android:name="tk.supernova.tmtimer.MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" />
</activity>
</application>
而且我已经申请了读/写权限:
private readonly string[] PermissionToCheck = {
Android.Manifest.Permission.WriteExternalStorage,
Android.Manifest.Permission.ReadExternalStorage
};
private const int REQUEST_ID = 0;
private const int STORAGE_PERMISSION_CODE = 23;
protected override void OnCreate(Bundle savedInstanceState)
{
Platform.Init(this, savedInstanceState);
if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
{
RequestPermissions(PermissionToCheck, REQUEST_ID);
}
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
try
{
StrictMode.VmPolicy policy = new StrictMode.VmPolicy.Builder()
.PenaltyDeathOnFileUriExposure()
.DetectFileUriExposure()
.Build();
StrictMode.SetVmPolicy(policy);
}
catch { }
}
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults)
{
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
知道我做错了什么吗?谢谢。
【问题讨论】:
-
使用 FileProvider 来提供您的文件。取消严格模式的东西。
-
不清楚为什么要显示清单文件的一部分。还不清楚为什么要为这些运行时权限显示代码,因为所有这些都与提供您的应用程序之前创建的文件无关。
-
我要测试@blackapps。我分享了我认为可能有用的东西。我过去遇到过棘手的 cmets。
-
嗨@blackapps,谢谢,现在可以了。我分享了我的更改。
标签: android excel android-intent xamarin.android android-intent-chooser