“选择默认使用的应用程序”未显示在应用程序选择器中

时间:2017-04-19 17:05:10

标签: c# android android-intent xamarin xamarin.android

Here显示了如何在启动意图时提供默认选项。但我看不出this的差异,除了一个案例Intent.ACTION_VIEW使用Intent.ACTION_SEND和另一个案例Context context = Forms.Context; var filePath = new File(filename); var fileUri = Android.Net.Uri.FromFile(filePath); string mimeType = Util.Helper.GetMIMEType(filename); Intent intent = new Intent(Intent.ActionView); intent.SetDataAndType(fileUri, mimeType); context.StartActivity(intent); 。这是我的代码:

Intent.createChooser

此外,我读到startActivityForResult()没有提供默认选项,所以我删除了它,但仍然没有成功。 SO上的其他提示也没有帮助(例如使用Context context = Forms.Context; var filePath = new File(filename); var fileUri = Android.Net.Uri.FromFile(filePath); string mimeType = Util.Helper.GetMIMEType(filename); Intent intent = new Intent(Intent.ActionView); intent.PutExtra(Intent.ExtraStream, fileUri); intent.SetType(mimeType); context.StartActivity(intent); )。

这是平板电脑上的设置吗?我在Android 5.1.1上。

修改

现在我尝试了Elvis Xia的建议:

fileUri

文件未打开。相反,我得到一个像

一样的祝酒词
  

无法获取文件名!

file:///storage/emulated/0/Documents/SomeApp/TempDocs/57761.7Z例如mimeType application/x-7z-compressed$(document).ready(function(){ tabilize(); });

2 个答案:

答案 0 :(得分:1)

要回答"“默认情况下选择要使用的应用”并未显示在应用选择器中"部分:

如果从context.StartActivity(intent);开始,android管理默认处理并将用户选择的默认值存储在应用本地数据中。您的应用程序无法使用api来操纵标准选择"

如果您使用Intent.createChooser(...),则没有默认机制。你总是得到选择器。

要了解Intent的工作原理,您可以使用intent-intercept中提供的Android开源应用fdroid app store

答案 1 :(得分:0)

从您的代码中,您正在尝试创建文件并通过Intent发送/共享该文件。问题是:Intent无法直接共享文件。如果您想实现这一目标,则必须将该文件作为前期工作存储在设备上,并使用以下内容进行共享:

sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(exportPath));

注意:exportPath使用file://xxx.xx架构。

如果您要发送的数据量不大,强烈建议您直接发送数据而不是文件。

更新:要在Android中创建文件,您需要致电file.createNewFile();

File file = new File(fileName);
file.CreateNewFile();
if (file.Exists())
{
     var fileUri = Android.Net.Uri.FromFile(file);
     string mimeType = Util.Helper.GetMIMEType(filename);

     Intent intent = new Intent(Intent.ActionSend);
     intent.PutExtra(Intent.ExtraStream, fileUri);
     intent.SetType(mimeType);

     context.StartActivity(intent);
}