#android #uri
#Android #uri
Вопрос:
Выполняя некоторые исследования и разработки, я нашел код, использующий следующее утверждение
Uri uri = (Uri) getIntent().getExtras().get("android.intent.extra.STREAM");
Я просканировал весь проект, чтобы выяснить, было ли вызвано действие из какого-либо другого действия, но не нашел ни одного. Кто-нибудь может сказать мне, что вернет этот оператор и что этот оператор "android.intent.extra.STREAM"
делает в коде, является ли это константой, если да, то каково ее значение?
Заранее спасибо.
Удачного кодирования
Ответ №1:
Этот оператор вернет дополнительное имя "android.intent.extra.STREAM"
. Какое бы действие ни выдало intent, оно установило это значение, и нет простого способа определить, что это за данные, не видя, как они используются или где / как они были установлены. Не забывайте, что intent может быть выдан любым действием или приложением.
Нашел ваш ответ:
public static final String EXTRA_STREAM Since: API Level 1
A content: URI holding a stream of data associated with the Intent, used with
ACTION_SEND to supply the data being sent.
Constant Value: "android.intent.extra.STREAM"
Итак, я бы предположил, что это результат плохого кодирования (с использованием значения, а не определенной статической константы) для намерения, предназначенного для обмена изображениями. Намерение включает Intent.EXTRA_STREAM
extra в качестве потока данных для изображения (в данном случае), которым будет предоставлен общий доступ. ИМО, код должен был быть:
Uri uri = (Uri) getIntent().getExtras().get(Intent.EXTRA_STREAM);
Но, несмотря на это, это, похоже, документированный / стандартизированный способ присоединения двоичного потока данных к intent.
Продолжение исследований, похоже, указывает на то, что он добавляет Campyre (клиент Campfire) в качестве опции «Поделиться». Итак, из галереи, если вы решите поделиться изображением, Campyre отображается в качестве одного из вариантов.
Google и сайт разработчиков Android — ваши друзья. Мне потребовалось всего около 2 минут, чтобы получить всю эту информацию. Не так долго, как потребовалось для ввода ответов и последующих правок…
Дополнительная проработка:
Вот соответствующий раздел из AndroidManifest.xml
:
<activity android:name=".ShareImage"
android:theme="@android:style/Theme.Dialog"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
Что указывает на то, что действие может обрабатывать намерения для совместного использования, где общим элементом является изображение.
Комментарии:
1. извините за неполный вопрос, я включил ссылку на этот код.
2. Но я не смог найти ни одного из методов в проекте, вызывающих это действие?
3. Не требуется. Посмотрите на AndroidManifest.xml файл для проекта. Вы увидите, что для этого действия есть
intentfilter
набор. Таким образом, он «регистрируется» для получения намерений на основе этого фильтра. Любое действие из любого приложения может выдать намерение, которое будет перенаправлено на действие. И вы никогда, никогда не увидите код, который его выдал.