9

ユーザーが任意のファイルをアップロードできるアプリがあります( .png.mp3.txt.pdf.bmp.apkなど)

一言で言えば -->** 任意の exe を含むファイル..!**

これらのファイルはリスト ビューで表示されます。

ユーザーがリスト ビュー インテントからアイテムを「タップ」または「クリック」すると、( android.content.Intent.ACTION_VIEW) が呼び出され、デバイスにインストールされているそれぞれのアプリケーションを開く必要があります。

例えば

ユーザーが nature.png をクリックすると、インテントが呼び出され、Gallery、PS Touch などのアプリケーションが提案されます (スクリーン ショット 1 に示すように) 。

ユーザーが book.pdf をクリックすると、インテントが呼び出され、MuPdf、Polaris Office、apv などのアプリケーションが提案されます (スクリーン ショット 2 に示すように) 。

.txt、.pdf、.png、.jpgの場合-- MIME タイプを設定して問題を解決しましたintent.setDataAndType(Uri.fromFile(file), mime);

また、URLについて

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(https://www.google.co.in/));

それは完全に機能していますが、残りのファイル拡張子についてはまだ混乱しています-どうすればよいですか? そしてどうすれば?

私はすでに掘り下げましたが、満足のいく答えを得ることができませんでした..!

私の質問:

  1. デバイスにインストールされたそれぞれのアプリケーションを呼び出すように、ファイル拡張子のコードを作成するにはどうすればよいですか??
  2. XML でカスタム ファイル拡張子を定義する方法は?
4

3 に答える 3

8

次のコードは、すべてのファイルタイプで機能します。

try {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(file), fileMimeType);
    startActivity(intent);
} catch (ActivityNotFoundException e) {
    // no Activity to handle this kind of files
}

もちろん、Activity特定のタイプのファイルを処理する方法を知っているシステムが存在する必要があります。お役に立てれば。

于 2013-02-21T11:30:27.263 に答える
1

あなたの質問の最初の部分を指しています:

try
{
  Intent intent = new Intent(Intent.ACTION_VIEW, uri);
  startActivity(intent);
}
catch (ActivityNotFoundException e)
{
  //tel the user to install viewer to perform this action
}

タイプを指定する必要はありません。データ URI から取得します。

于 2013-02-21T11:31:53.820 に答える
0
public void openFile() {
    try {
        File file = new File(G.DIR_APP + fileName);
        fileExtension = fileName.substring(fileName.lastIndexOf("."));
        Uri path = Uri.fromFile(file);
        Intent fileIntent = new Intent(Intent.ACTION_VIEW);
        fileIntent.setDataAndType(path, "application/" + fileExtension);
        startActivity(fileIntent);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(G.currentActivity, "Cant Find Your File", Toast.LENGTH_LONG).show();
    }

}
于 2016-08-04T02:10:43.393 に答える