没有告诉用户他们无法打开他们的文件b / c "没有支持的应用程序" (即三星)或其他什么,我不想让他们选择一个应用,例如华硕(KitKat)使用文件管理器。打开名为 test.noapp 的文件会显示以下提示
选择文本然后提供文本处理应用列表
我是否必须推出自己的" Open as" 类别列表,或者我可以利用API(级别23)中的某些内容?
以下代码用于打开文件
Intent viewFileIntent = new Intent(Intent.ActionView);
Android.Net.Uri uriFile = Android.Net.Uri.FromFile(selectedAttachmentDetails.File);
string mimeType = GetAttachmentFileTypeMimeString(selectedAttachmentDetails.File.Name);
viewFileIntent.SetDataAndType(uriFile, mimeType);
THIS.StartActivityForResult(Intent.CreateChooser(viewFileIntent, "Complete action using"), 0);
private string GetAttachmentFileTypeMimeString(string attachmentFileName)
{
string ext = Android.Webkit.MimeTypeMap.GetFileExtensionFromUrl(attachmentFileName);
Android.Webkit.MimeTypeMap map = Android.Webkit.MimeTypeMap.Singleton;
string mimeType = map.GetMimeTypeFromExtension(ext);
return mimeType == null ? "*/*" : mimeType;
}
答案 0 :(得分:1)
他们询问是否text
,audio
,video
等等的原因是设置详细mime
并让android操作系统处理它
考虑到这一点,你可以猜测 mime并设置它。除此之外还有guessContentTypeFromStream
来自班级MimeTypeMap。
答案 1 :(得分:0)
<强> styles.xml 强>
<style name="OpenAsDialog" parent="android:Theme.Holo.Light.Dialog">
<item name="android:windowIsFloating">true</item>
</style>
<强> OpenAsDialog.axml 强>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/open_as_dialog_root"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#C0C0C0">
<TextView
android:id="@+id/open_as_dialog_tv_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom ="0.5dp"
android:padding="10dp"
android:background="#FFFFFF"
android:text="Text"
android:textSize="16sp"
android:textColor ="#808080"/>
<TextView
android:id="@+id/open_as_dialog_tv_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom ="0.5dp"
android:paddingTop="0dp"
android:padding="10dp"
android:background="#FFFFFF"
android:text="Image"
android:textSize="16sp"
android:textColor ="#808080"/>
<TextView
android:id="@+id/open_as_dialog_tv_audio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom ="0.5dp"
android:padding="10dp"
android:background="#FFFFFF"
android:text="Audio"
android:textSize="16sp"
android:textColor ="#808080"/>
<TextView
android:id="@+id/open_as_dialog_tv_video"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:background="#FFFFFF"
android:text="Video"
android:textSize="16sp"
android:textColor ="#808080"/>
</LinearLayout>
<强> DialogFragment 强>
public class OpenAsDialog : DialogFragment
{
public static OpenAsDialog NewInstance()
{
OpenAsDialog dialogFragment = new OpenAsDialog();
return dialogFragment;
}
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetStyle(DialogFragmentStyle.Normal, Resource.Style.OpenAsDialog);
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View messageView = inflater.Inflate(Resource.Layout.OpenAsDialog, container, false);
return messageView;
}
public override void OnViewCreated(View view, Bundle savedInstanceState)
{
base.OnViewCreated(view, savedInstanceState);
Dialog.SetTitle("Open as");
}
}
<强>用法强>
private void ShowOpenAsDialog()
{
OpenAsDialog openAsDialog = OpenAsDialog.NewInstance();
openAsDialog.Show(THIS.FragmentManager, "open_as_dialog");
}