通知栏 - 点击后如何打开指定位置的文件浏览器

3

我更新了我的问题,因为有些误解。

所以,我有一个通知。当我点击那个通知时,我希望文件浏览器应用程序(当然是第三方应用程序)打开。无论是哪个应用程序,如果有多个文件浏览器,则应提示“使用以下应用程序打开”-然后打开/sdcard/folder(如果可能)

我的通知在Listar.class中。

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(R.drawable.ic_menu_save, msg, System.currentTimeMillis());
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, Open.class), 0);
        notification.setLatestEventInfo(this, filename+" downloaded", "Click to open folder", contentIntent);
        manager.notify(1, notification);

我的开放类在这里:

public class Open extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try{
        Intent intent = new Intent("org.openintents.action.PICK_FILE");
        startActivityForResult(intent, 1);
    }

    catch(Exception e)
    {
        Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
        Log.v("EX",e.toString());
    }
    }

}

这会打开oi文件管理器(没有“打开方式” - 我没有选择默认应用程序),并进入/sdcard目录,所以我需要您的帮助。


我不知道是否有标准的Android支持的打开文件浏览器的方法。换句话说,我不认为Android提供了一个用户可以看到和交互的文件浏览器活动/应用程序。 - rf43
@DDoSAttack是对的,你需要为你的应用程序编写自己的文件IO,或者如果你只想要一个文件浏览器,可以从应用商店下载第三方应用程序,如Astro。 - Noah
@sqrfv 我知道这取决于第三方应用程序... 我只需要知道,如果存在,如何调用它! - Tiago
没有“intent.setData(Uri.parse("file:///sdcard"))”这样的东西,请使用http://developer.android.com/guide/topics/data/data-storage.html#filesExternal。 - rf43
那么我该怎么做才能获得“打开方式”提示并打开指定的文件夹呢?有什么想法吗? - Tiago
所有的内容都在这里:http://developer.android.com/guide/topics/data/data-storage.html#filesExternal 特别是要看子部分“访问外部存储上的文件”。 - rf43
3个回答

3
Intent toLaunch = new Intent();
toLaunch.setAction(android.content.Intent.ACTION_VIEW);
toLaunch.setDataAndType(Uri.fromFile(new File("file_path")), MimeTypeMap.getSingleton().getMimeTypeFromExtension("jpeg"));  // you can also change jpeg to other types

而不是:
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, Open.class), 0);

write:

PendingIntent contentIntent = PendingIntent.getActivity(this, 0, toLaunch , 0);

1
如果您想要查找特定意图是否存在(例如,包已安装),可以使用类似以下代码的方式...
/**
 * Checks the system to see if the passed intent package exists.
 * 
 * @param pIntent
 *            intent to be checked
 * @return true if the package exists
 */
private final boolean checkIfPackageExists( final Intent pIntent ) {
    // Build package manager
    final PackageManager packageManager = this.getPackageManager();
    final List<ResolveInfo> list = packageManager.queryIntentActivities( pIntent, PackageManager.MATCH_DEFAULT_ONLY );

    return list.size() > 0;
}

@Tiago 如果你想打开第三方应用程序,你应该检查是否有人将接收到你的意图。这就是我发布的代码的作用。 - rf43
是的,这正是我现在在遇到一些异常时所思考的 :) 谢谢! - Tiago
但是我只能一个一个地检查吗?没有意图标签用于文件夹导航以获取打开提示吗? - Tiago

1

是的,我知道,我的主要问题是:在我的情况下,我正在调用相同的活动。假设我有其他活动“打开”。如何编写代码以打开文件资源管理器并指定位置? - Tiago
我相信默认行为是打开一个新实例并保留在后台运行的实例。然后,新实例将具有文件位置。如果您只想在应用程序已在运行时更新应用程序,请参见以下示例:https://dev59.com/XHE95IYBdhLWcg3wKq2q。 - Noah
这只是展示了如何启动活动,而不是我需要的启动活动的方法...已更新问题。 - Tiago

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接