Как связать приложение Android с файлами Google Диска, имеющими определенное расширение?

#android #google-drive-api #intentfilter

#Android #google-drive-api #intentfilter

Вопрос:

Мне нужно связать файлы с определенным расширением с Google Диска (например, .gpx) с моим приложением. Поэтому, когда я нажимаю на файл .gpx на диске, у меня должна быть возможность открыть этот файл с помощью моего приложения.

В настоящее время у меня есть действие, обрабатывающее эти файлы, щелкающие, объявленные в AndroidManifest.XML как показано ниже, и это работает для локально сохраненных файлов и вложений gmail, но не для диска:

  <activity
            android:name=".ui.PhotosActivity"
            android:label="@string/app_name"
            android:launchMode="singleTop"
            >

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

            <intent-filter
                android:icon="@drawable/ic_launcher"
                android:label="@string/app_name"
                android:priority="1">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>

                <data android:scheme="http"/>
                <data android:scheme="https"/>
                <data android:scheme="ftp"/>
                <data android:scheme="file"/>
                <data android:host="*"/>
                <data android:mimeType="*/*"/>
                <data android:pathPattern=".*\.gpx"/>
            </intent-filter>

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

                <action android:name="com.google.android.apps.drive.DRIVE_OPEN" />

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

                <data
                    android:mimeType="application/octet-stream"
                    android:pathPattern=".*\.gpx"
                    android:scheme="file"/>
                <data
                    android:mimeType="application/octet-stream"
                    android:pathPattern=".*\.gpx"
                    android:scheme="content"/>
            </intent-filter>
        </activity>
  

Ответ №1:

Добавьте это в свой манифест:

     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  

Затем добавьте это в свою активность:

 <meta-data
            android:name="com.google.android.apps.drive.APP_ID"
            android:value="id=xxxxxxx" />
  

где xxxxxxx — это ваш идентификатор проекта, объявленный в консоли Google API.

 <intent-filter>
            <action android:name="com.google.android.apps.drive.DRIVE_OPEN" />

            <data android:mimeType="application/vnd.google-apps.drive-sdk.1234567890" />
            <data android:mimeType="*/*" />
            <data android:pathPattern=".*\.gpx" />
         </intent-filter>