将新文件与Android应用程序关联

将新文件与Android应用程序关联,android,android-manifest,intentfilter,Android,Android Manifest,Intentfilter,我想注册一个新的文件扩展名(.db_backup),以便使用我的应用程序打开所有具有此扩展名的文件 基本上,这种类型的文件会作为附件备份到电子邮件中。打开附件时,我希望此类型的所有文件都能直接用我的应用程序打开 我成功地做到了这一点,因为我提到了android:mimeType=application/* 但现在所有的应用程序(PDF、APK)都是用我的应用程序打开的(这一点很明显,因为提到了*)。请告诉我在清单中我应该提到什么安卓:mimeType?我的AndroidManifest.xml如

我想注册一个新的文件扩展名(.db_backup),以便使用我的应用程序打开所有具有此扩展名的文件

基本上,这种类型的文件会作为附件备份到电子邮件中。打开附件时,我希望此类型的所有文件都能直接用我的应用程序打开

我成功地做到了这一点,因为我提到了android:mimeType=application/*

但现在所有的应用程序(PDF、APK)都是用我的应用程序打开的(这一点很明显,因为提到了*)。请告诉我在清单中我应该提到什么安卓:mimeType?我的AndroidManifest.xml如下所示:

<activity
        android:name="com.package.RestoreFromMail"
        android:configChanges="keyboardHidden|orientation"
        android:label="@string/restore_mail" >
        <intent-filter android:priority="1" >
            <category android:name="android.intent.category.DEFAULT" >
            </category>

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

            <data
                android:host="*"
                android:pathPattern=".*\\.db_backup"
                android:scheme="http" >
            </data>
        </intent-filter>
        <intent-filter android:priority="1" >
            <category android:name="android.intent.category.DEFAULT" >
            </category>

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

            <data
                android:host="*"
                android:pathPattern=".*\\.db_backup"
                android:scheme="file" >
            </data>
        </intent-filter>
        <intent-filter android:priority="1" >
            <category android:name="android.intent.category.DEFAULT" >
            </category>

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

            <data
                android:host="*"
                android:mimeType="application/*" >
            </data>
        </intent-filter>
    </activity>

这就是我现在在应用程序中设置意图的方式。只需将.ext替换为您的分机。还请注意,我使用的是mimeType=“*/*”。必须这样做才能与Astro文件管理器一起工作。现在通过删除内容方案中的android:host=“*”,它也可以处理电子邮件了

<!-- For email -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="content" />
    <data android:pathPattern=".*\\.ext" />
    <data android:mimeType="application/octet-stream" />
 </intent-filter>

  <!-- For http -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="http" />
    <data android:host="*" />
    <data android:pathPattern=".*\\.ext" />
    <data android:pathPattern=".*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:mimeType="*/*" />
 </intent-filter>

<!-- For https -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="https" />
    <data android:host="*" />
    <data android:pathPattern=".*\\.ext" />
    <data android:pathPattern=".*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:mimeType="*/*" />
 </intent-filter>

<!-- For file browsers and google drive -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="file" />
    <data android:host="*" />
    <data android:pathPattern=".*\\.ext" />
    <data android:pathPattern=".*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:mimeType="*/*" />
 </intent-filter>

这就是我现在在应用程序中设置意图的方式。只需将.ext替换为您的分机。还请注意,我使用的是mimeType=“*/*”。必须这样做才能与Astro文件管理器一起工作。现在通过删除内容方案中的android:host=“*”,它也可以处理电子邮件了

<!-- For email -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="content" />
    <data android:pathPattern=".*\\.ext" />
    <data android:mimeType="application/octet-stream" />
 </intent-filter>

  <!-- For http -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="http" />
    <data android:host="*" />
    <data android:pathPattern=".*\\.ext" />
    <data android:pathPattern=".*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:mimeType="*/*" />
 </intent-filter>

<!-- For https -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="https" />
    <data android:host="*" />
    <data android:pathPattern=".*\\.ext" />
    <data android:pathPattern=".*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:mimeType="*/*" />
 </intent-filter>

<!-- For file browsers and google drive -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="file" />
    <data android:host="*" />
    <data android:pathPattern=".*\\.ext" />
    <data android:pathPattern=".*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\..*\\.ext"/>
    <data android:mimeType="*/*" />
 </intent-filter>


您解决了这个问题吗?这是您最后的意图过滤器,没有将其与所有内容关联的方案。我一直在努力让这一切顺利进行。问题是如果没有这个,这个协会就无法通过邮件和谷歌硬盘工作。我尝试添加android:pathPattern,但它似乎忽略了它。是的,删除最后一个意图过滤器不允许从邮件中打开任何文件。仍在努力修复它。您可以尝试以下操作:将扩展名更改为.db,并在last intent筛选器中将android:mimeType更改为application/octet流。希望这会有帮助!!我今天取得了一些进展。您可以通过添加android:scheme=“content”缩小上一个过滤器的范围。通过这种方式,至少不是所有文件都与文件管理器和其他应用程序关联。对于文件和http,如果路径中有多个“.”,则需要添加更多的pathPattern。我认为,在保存附件之前,pathPattern无法处理电子邮件的原因是没有传递文件名。在我的意图中,我使用getPath()进行了测试。请发布一些代码,以便在android:scheme=“file”或“http”情况下添加更多pathPattern。您是否修复了此问题?这是您最后的意图过滤器,没有将其与所有内容关联的方案。我一直在努力让这一切顺利进行。问题是如果没有这个,这个协会就无法通过邮件和谷歌硬盘工作。我尝试添加android:pathPattern,但它似乎忽略了它。是的,删除最后一个意图过滤器不允许从邮件中打开任何文件。仍在努力修复它。您可以尝试以下操作:将扩展名更改为.db,并在last intent筛选器中将android:mimeType更改为application/octet流。希望这会有帮助!!我今天取得了一些进展。您可以通过添加android:scheme=“content”缩小上一个过滤器的范围。通过这种方式,至少不是所有文件都与文件管理器和其他应用程序关联。对于文件和http,如果路径中有多个“.”,则需要添加更多的pathPattern。我认为,在保存附件之前,pathPattern无法处理电子邮件的原因是没有传递文件名。在我的意图中,我使用getPath()进行了测试。请发布一些代码,以添加更多pathPattern,以防android:scheme=“file”或“http”解决方案完美工作。但现在有一个新问题。当我在三星Galaxy S III(Android 4.1.2)上收到Gmail提醒时,它会问我是想用Gmail还是我的应用打开邮件。如果我选择“仅一次”使用Gmail,邮件就会打开。如果我选择“始终”,整个手机将重新启动。需要对意图过滤器进行哪些更改?我的Nexus4没有这个问题,我必须在friends S3上进行测试。您在内容方案的意向过滤器中是否有?请让我知道,如果你仍然有这个问题!你必须做些不同的事情吗?如果其他人遇到同样的问题,也许可以发布您的解决方案。谢谢这个解决方案非常有效。但现在有一个新问题。当我在三星Galaxy S III(Android 4.1.2)上收到Gmail提醒时,它会问我是想用Gmail还是我的应用打开邮件。如果我选择“仅一次”使用Gmail,邮件就会打开。如果我选择“始终”,整个手机将重新启动。需要对意图过滤器进行哪些更改?我的Nexus4没有这个问题,我必须在friends S3上进行测试。您在内容方案的意向过滤器中是否有?请让我知道,如果你仍然有这个问题!你必须做些不同的事情吗?如果其他人遇到同样的问题,也许可以发布您的解决方案。谢谢