【问题标题】:Opening files from Google Drive in my Android app by file extension通过文件扩展名在我的 Android 应用中打开 Google Drive 中的文件
【发布时间】:2016-04-17 16:40:37
【问题描述】:

所以我设法让我的应用程序从文件管理器打开具有特定扩展名的文件,但是用户是否可以点击 Google Drive 中的文件并以相同的方式打开它? 我的意思是我知道这是可能的,其他应用程序会这样做,但这样做的步骤是什么?我对我的应用程序能够以任何方式操作 Google Drive 上的文件不感兴趣,只是让 Google Drive 像文件管理器那样将文件“发送”到我的应用程序。

这是我现在使用的意图过滤器,但它不适用于 Google Drive 中的文件:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
            <action android:name="com.google.android.apps.drive.DRIVE_OPEN" />              
    <data android:scheme="file" />
    <data android:mimeType="*/*" />
    <data android:pathPattern=".*\\.xz9" />
    <data android:host="*" />
</intent-filter>

【问题讨论】:

  • 尝试content: 方案,对于初学者。当您请求对 .xz9 文件执行某些操作时,您可能还会查看 Drive 应用程序中是否有任何特定的日志记录,这让您了解完整的 Uri 是什么,以查看文件扩展名是否为在那里。
  • 驱动器在日志中的任何地方都没有提到。相反,它是 ActivityManager: START u0 {act=android.intent.action.VIEW cmp=com.google.android.apps.docs/.projector.ProjectorLaunchActivity (has extras)} from uid 10072 on display 0 不管这意味着什么。我不知道content: 方案是什么,Google 搜索返回的内容对于如此简单的操作来说看起来非常复杂。
  • 这将启动 Google 文档应用的内部活动 (ProjectorLaunchActivity)。奇怪的是,那里没有Uri,这是我所预料的。 “我不知道什么是内容:scheme”——这将是file:http:https: 等的替代方案。它指的是content published by a ContentProvider,这是未来everything will be moving 的位置.
  • 啊,是的,那个的东西。有时间我会研究内容提供程序教程,但我不知道为什么 Google 云端硬盘根本不会执行每个文件管理器在您点击文件时所做的事情。
  • 作为we discussed previously,它可能正在使用 MIME 类型,如果它知道的话。您可以考虑为VIEWcontent:*/* 的MIME 类型临时添加&lt;intent-filter&gt;,然后查看Drive 是否识别您。如果是这样,你可以检查你得到的Intent,然后看看你是否能想出一个更受限制的&lt;intent-filter&gt;

标签: android


【解决方案1】:

我自己为我的应用测试了它。您需要将此intent-filter 添加到您的活动中,这样当用户点击 Google Drive 应用程序中的文件时,您的应用程序就会被列出,而不管文件的扩展名是什么。

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

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

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

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

    <data
        android:scheme="file" />

    <data
        android:scheme="content" />

    <data
        android:mimeType="application/plain" />

    <data
        android:mimeType="application/octet-stream" />

    <data
        android:mimeType="text/*" />
</intent-filter>

【讨论】:

  • 这可行,但它适用于任何文件扩展名和 snu 文件类型,无论它是否适合我的应用程序。我尝试在其中添加&lt;data android:pathPattern=".*\\.xz9" /&gt;,但它并没有改变任何东西。它仍然会打开与任何其他应用程序不匹配的任何文件。
  • @TimSim 你为什么要达到这个目标?
  • 打开具有特定扩展名且没有其他类型的文件。如果结果是错误的文件,应用程序可以处理,但如果用户点击与我的应用程序无关的随机文件,我不希望我的应用程序打开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
相关资源
最近更新 更多