2

我在 listview 中有一个文件列表 .. 这些文件实际上驻留在 sd 卡上。现在我想使用应用选择器打开这些文件。即,如果此文件是图像,它应该显示我手机中所有可以在应用程序选择器框中打开 jpg 类型文件的应用程序。我该怎么做..有人可以给我任何想法吗?任何帮助表示赞赏:) 在此先感谢我找到了一段代码..我如何在我的应用程序中使用它?

public class Redirector {
public static void showActivityWithChooser( Context context, int chooserLabelTitleId, Intent intent ) {
  try {
    context.startActivity( Intent.createChooser( intent, 
                 context.getResources().getString( chooserLabelTitleId )) );
  } catch( Exception e ) {
    e.printStackTrace();
  }
}

public static void viewInExternalApplication( Context context, String url ) {
  Intent intent = new Intent(   Intent.ACTION_VIEW );
  intent.setData( Uri.parse( url ) );
  intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET );
  showActivityWithChooser( context, R.string.open_chooser_title, intent );
}

}

4

5 回答 5

1

只需发送意图。如果安装了多个能够显示指定文件类型的应用程序,Android 将显示一个应用程序选择器本身,或者直接启动应用程序,如果只有一个(或用户在应用程序中选择“始终”/“记住我的选择”选择器)

于 2014-05-20T12:27:09.940 回答
1

要获得可以成功打开给定意图的应用程序,您将使用 PackageManager。只需像上面那样构造意图,然后使用此代码来获取可以处理该意图的应用程序。

Intent myIntent = new Intent();
myIntent.setAction(Intent.ACTION_VIEW);
myIntent.addCategory("android.intent.category.LAUNCHER");
myIntent.setType("mp3");    

PackageManager manager = getPackageManager();
        List<ResolveInfo> info = manager.queryIntentActivities(myIntent,PackageManager.MATCH_DEFAULT_ONLY);

这将为您提供有关可以处理意图的程序的所有信息,包括图标和包名。然后,您可以使用这些选项创建一个对话框并保存用户选择的选项。

于 2014-05-20T13:16:02.797 回答
1
String path = Environment.getExternalStorageDirectory().getAbsolutePath()
            + "/YOUR_PATH_TO_Images/";

 try {
            if (f.exists()) {
                File file = new File(path
                        + listViewArray.get(position).getImageName());
                Intent target = new Intent(Intent.ACTION_VIEW);

                target.setDataAndType(Uri.fromFile(file),
                        "image/*");


                target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

                Intent intent1 = Intent.createChooser(target,
                        "Open With");

                startActivity(intent1);
            }

        } catch (ActivityNotFoundException e) {
            Toast.makeText(getActivity(), "No Pdf found",
                    Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }
于 2014-05-20T12:37:17.060 回答
0

1.这个问题与Mime 类型有关

首先获取文件的扩展名并将元素使用的mime类型设置为列表

private String extenstionFile(String url) {
    if (url.indexOf("?")>-1) {
        url = url.substring(0,url.indexOf("?"));
    }
    if (url.lastIndexOf(".") == -1) {
        return null;
    } else {
        String ext = url.substring(url.lastIndexOf(".") );
        if (ext.indexOf("%")>-1) {
            ext = ext.substring(0,ext.indexOf("%"));
        }
        if (ext.indexOf("/")>-1) {
            ext = ext.substring(0,ext.indexOf("/"));
        }
        return ext.toLowerCase();

    }
}

比打开支持的应用程序列表类型:-

MimeTypeMap myMime = MimeTypeMap.getSingleton(); 
Intent newIntent = new Intent(android.content.Intent.ACTION_VIEW);

//Intent newIntent = new Intent(Intent.ACTION_VIEW);
   String mimeType =   myMime.getMimeTypeFromExtension(extenstionFile(getFile().toString()).substring(1));
   newIntent.setDataAndType(Uri.fromFile(getFile()),mimeType);
   newIntent.setFlags(newIntent.FLAG_ACTIVITY_NEW_TASK);
try {
    _context.startActivity(newIntent);
} catch (android.content.ActivityNotFoundException e) {
    Toast.makeText(_context, "No handler for this type of file.", 4000).show();
}
于 2014-05-20T12:44:56.157 回答
0

选择文件后,请检查是哪个文件(例如pdf,jpg),然后创建一个ACTION_VIEW意图并根据所选文件类型设置意图类型。现在广播意图,系统本身将向您显示支持查看您的文件的应用程序列表。

检查下面的链接,你会得到更好的主意。

http://developer.android.com/guide/components/intents-filters.html

于 2014-05-20T12:49:55.363 回答