#android #json #android-intent #intentfilter
#Android #json #android-намерение #intentfilter
Вопрос:
Приложение Trainingpeaks может экспортировать представление тренировки в формате JSON. Я загрузил средство просмотра JSON на Android, и оно работает. Я хочу написать свое собственное приложение, чтобы получить это намерение и что-то с ним сделать. Проблема в том, что мое приложение не распознается как способное получить это намерение. Какую форму должен принимать фильтр намерений? Если я добавлю тег данных в существующий файл манифеста intent-filter, приложение не появится на устройстве. Если я настрою два фильтра намерений, это произойдет, но все комбинации категорий действий и тегов данных, которые я пробовал, не позволяют распознать мое приложение для получения JSON. Я поражен тем, насколько плохо это документировано, и довольно разочарован тем, что прибегаю к методу проб и ошибок. Последнее, что я пробовал, было:
<activity android:name=".MainActivity">
<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.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/*"/>
</intent-filter>
</activity>
Комментарии:
1. «Я поражен тем, насколько плохо это документировано» — вы спрашивали разработчиков приложения Trainingpeaks, какую
Intent
структуру они используют? Или вы проверили Logcat, чтобы определить, какуюIntent
структуру они используют? Было бы неплохо, если бы разработчики Trainingpeaks задокументировали это, но не все документируют свои API. Другой вариант — использовать приложение, подобное этому, чтобы просмотреть манифест вашего средства просмотра JSON и посмотреть, для чего оно используется<intent-filter>
. Например, это может бытьACTION_VIEW
вместоACTION_SEND
.2. Нет. TP не хотят играть. Хотя спасибо за советы. Я нашел эту строку в logcat, которая, я думаю, должна быть ею? 04-20 18:20:51.205 3821 4520 I ActivityManager: START u0 {act=android.intent.action. ПРОСМОТРЕТЬ тип=application/json flg=0x1 cmp=null} из uid 10303 . Я не хочу указывать uid. Что бы вы предложили для конфигурации intent-filter? Еще раз спасибо. Нарисовал.
3. Это работает. ПРОСМОТР и application.json. Я был уверен, что уже пробовал это, но это может быть, когда я добавил эти строки в исходный фильтр намерений, который останавливает установку приложения на устройстве. Я не нашел официальную документацию по Android полезной, кроме как в обзоре концепций sketch. По крайней мере, сейчас это работает, поэтому я должен иметь возможность получить свой json из пакета. Большое спасибо. Нарисовал.
4. ОК. Теперь у меня есть одна пара ключ-значение в пакете. Он имеет тип android.net . Uri $HierarchicalUri. Его значением является содержимое://com.peaksware.trainingpeaks.provider.enteranl_files/TrainingPeaks/2019-04-21. Это URL-адрес для загрузки JSON с их сервера? Я ввел браузер, но он просто говорит, что <uri> не соответствует ни одному документу. Почему?
5. «Это URL-адрес для загрузки JSON с их сервера?» — нет.
Uri
Начинается сcontent
, а неhttp
с илиhttps
. Это от аUri
до аContentProvider
, вероятноFileProvider
, используемое их приложением. ИспользуйтеContentResolver
иopenInputStream()
для полученияInputStream
информации о контенте , идентифицированномUri
.