动态关联文件类型与我的应用程序

时间:2012-08-15 10:54:38

标签: android file associations

我有一个应用程序将pdf文件关联到我的Manifest(通过intent-filters),所以当有人点击默认浏览器中的pdf链接时,我可以用我的应用程序执行该操作并使用进度条下载它。我的问题是,这是一种方式,我可以关联其他文件,但不能在我的清单中“硬编码”,但让用户选择(或写入)首选项中的文件扩展,例如我可以从代码中动态添加它。我知道可能这可以通过广播接收器完成,但无法找到任何示例或简单的代码。我已经在bsplayer设置中看到了喜欢这样的偏好菜单..但是不能发布图片因为没有足够的声誉。

我会尝试更详细地解释我的问题,因为我认为对下面的答案存在一些误解。

  1. 我有一个应用程序,在我的清单中有可用的代码。

       <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
    
            <data android:scheme="http" />
            <data android:host="*" />
            <data android:pathPattern=".*\\.pdf" />
        </intent-filter>
    
  2. 2.i启动我的应用程序,用它注册.pdf文件。所以下次我点击浏览器中的pdf链接时,会弹出一个窗口,让我选择应该用什么应用程序来完成该操作。如果我选择我的应用程序,我的主要活动就会启动,我使用getIntent(),我的应用程序使用进度条下载文件。

    3.问题是我想下载和其他类似的文件即。 jpg,png ..等等,但是让用户可以选择使用我的应用程序,或者甚至让他为使用我的应用程序下载的文件编写扩展名,如果点击链接导致那种文件。

    4.为了使这件事发生,文件扩展应该在代码中动态添加,而不是在清单中。我正在寻找一些广播接收器的例子,因为那个类可以使用IntentFilter类,但是不能真正理解我应该用它做什么。

    5.我的主要目标:启动我的应用程序,有一些微调器或编辑框的布局。用户选择/写入一些扩展名(.dwf)。该扩展程序现已在我的应用程序中注册。如果下次用户浏览互联网点击导致.dwf文件的链接,他可以选择继续使用我的应用程序操作。并且应该像.pdf一样下载文件

    6.sry我的英语不好,一些帮助将不胜感激。也代码;)

1 个答案:

答案 0 :(得分:0)

boolean enabled=prefs.getBoolean(key, false);
int flag=(enabled ?
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
ComponentName component=new ComponentName(MyActivity.this, TargetActivity.class);

getPackageManager()
    .setComponentEnabledSetting(component, flag,
                                PackageManager.DONT_KILL_APP);

根据您的偏好,您可以在BOOT_COMPLETED收件人中停用处理文件类型的活动。我相信你必须有不同的活动来处理不同的文件类型,然后有选择地禁用