在我的应用程序中打开自定义文件格式,而不是在Android上下载

时间:2015-03-07 01:45:41

标签: android android-manifest file-association

当用户在其网络浏览器中(在Android手机上)键入我的.someExt文件的网址时,会显示以下消息:

  

此内容是不受支持的内容。你真的想下载吗?

相反,我想将.someExt(我的自定义文件扩展名)与我的Android应用程序(用户之前已经下载过)关联起来,这样当用户在浏览器中将网址键入.someExt我的应用程序时将打开文件。

如何实现呢?我想我必须在我的Activity中使用manifest和一些“handle”方法来完成。

基于:Associate App with file extension - Intent filter Not working?

我用过:

<activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>





        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data android:mimeType="application/someExt" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data android:host="*" />
            <data android:scheme="file" />
            <data android:scheme="smb" />
            <data android:scheme="content" />
            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:mimeType="*/*" />
            <data android:pathPattern=".*\\.someExt" />
        </intent-filter>
    </activity>

现在,当用户输入我的.someExt的网址时,正在下载文件,我可以在下载完成后打开它(因此我的应用程序将运行它)。但我不希望所有这些额外的点击 - 我希望它是:

  1. 用户点击网站上.someExt的链接。
  2. 我的Android应用程序中会打开.someExt
  3. 而不是:

    1. 用户点击网站上.someExt的链接。
    2. 文件开始下载。
    3. 用户打开“下载”并点击下载的文件。
    4. 我的Android应用程序中会打开.someExt

1 个答案:

答案 0 :(得分:0)

我认为您无法在Android中使用不同类型的浏览器实现此功能。 URL用户类型大多数时间由浏览器处理。如何处理该方案取决于浏览器的行为。如果您的方案是http,浏览器将尝试使用它自己打开并自行处理。

目前,大多数浏览器都添加了对market方案的支持。如果URI方案为market,则会跳转到Google Play或其他市场。

但可以使用Intent从其他应用中完成。

声明您的活动,如下所示,以接收ACTION_VIEW行动。

   <activity
        android:name=".MainActivity2Activity"
        android:label="@string/title_activity_main_activity2">
        <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:host="com.example.myapp"
                android:mimeType="*/*"
                android:pathPattern=".*\\.someExt"
                android:scheme="http" />
        </intent-filter>
    </activity>

从其他应用中,您可以这样做。

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("http://com.example.myapp/test.someExt"), "*/*");
intent.setPackage("com.example.myapplication");
startActivity(intent);