"android.intent.extra.STREAM"

rah*_*hul 7 android uri

在做一些研发时,我发现了一个使用以下语句的代码

Uri uri = (Uri) getIntent().getExtras().get("android.intent.extra.STREAM");
Run Code Online (Sandbox Code Playgroud)

我已经扫描了整个项目,以确定该活动是否来自任何其他活动,但没有找到任何活动.任何人都可以告诉我这个语句将返回什么"android.intent.extra.STREAM"以及代码中的语句是什么,是否是常量,如果是,它的值是什么?

提前致谢.

快乐的编码

Ken*_*ins 12

此语句将返回额外的命名"android.intent.extra.STREAM".无论发布什么活动意图设置该值,并且没有简单的方法来告诉数据是什么,而不知道它是如何使用的,或者设置的位置/方式.不要忘记任何活动或应用程序都可以发布意图.

找到你的答案:

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"
Run Code Online (Sandbox Code Playgroud)

因此,我认为这是为了共享图像的意图编码不良(使用值而不是定义的静态常量)的结果.意图包括Intent.EXTRA_STREAM额外作为要共享的图像(在这种情况下)的数据流.IMO,代码应该是:

Uri uri = (Uri) getIntent().getExtras().get(Intent.EXTRA_STREAM);
Run Code Online (Sandbox Code Playgroud)

但无论如何,它似乎是将二进制数据流附加到意图的文档化/标准化方式.

持续的研究似乎表明它将Campyre(Campfire客户)添加为"共享"选项.因此,如果您选择共享图像,那么从画廊中,Campyre会显示为其中一个选项.

谷歌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>
Run Code Online (Sandbox Code Playgroud)

这表示活动可以处理共享的Intent,其中共享的项目是图像.