2017-07-12 8 views
0

ファイルを開くことができないことをユーザに伝えるのではなく「サポートされているアプリケーションがありません」(つまりSamsung)か何か、 などAsus(KitKat)はファイルマネージャでアプリを選択します。 test.noappという名前のファイルを開くと、テキストを選択する次のプロンプトAndroid(6.0)で不明なファイルタイプを開く

enter image description here

を与え、その後、テキスト処理アプリケーション

enter image description here

のリストを与える私はロールバックする必要があります私自身の"カテゴリリストとして開くか、または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; 
} 

答えて

1

彼らはそれはだかどうかを尋ねる理由を開くために使用されtextは、audiovideoなどが詳細mimeを設定し、アンドロイドOSをさせることです扱う。

これを念頭に置いてと思います。それ以外にもguessContentTypeFromStream

これはクラスMimeTypeMapからです。

+0

これは私がそれを自分自身を書くことだった場合、私はそれを実装するために考え出した方法ですが、私だけで可能な限りAPIを活用することなどです。 – samosaris

+0

私はタイプを識別するために 'MimeTypeMap'を使用しています。 * null *を返すと、ユーザーはそれらを推測することなく、(* "*/*" 'があまりにも大きなリストを与えるので、カテゴリに分解することはできません)。 – samosaris

+1

@SamusArinはい、ダイアログを表示して、 'text/*'、 'audio/*'などに絞り込むことができます。 –

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"); 
} 
+0

https://developer.android.com/reference/android/app/DialogFragment.html – samosaris

+0

https://stackoverflow.com/questions/7977392/android-dialogfragment-vs-dialog – samosaris

関連する問題