如何从android.intent.action.SEND获取图像细节?

时间:2018-02-13 10:28:00

标签: android android-intent android-activity metadata intentfilter

我想要这样的东西。

enter image description here

不是用户界面,只是数据。 (图像的元数据)
在Chrome浏览器或其他浏览器中,当我浏览时,我会得到网格或图片列表,当我长按任何图像时,它会显示“共享图像”选项。所以当我点击“分享图片”时。

  

我想要我的申请(要求

     
      
  1. 显示在选择器对话框中。 (的工作
  2.   
  3. 检索有关图片的信息(标题,网址,缩略图)(不工作
  4.   

我做了相反多次(从我的应用程序共享一些链接到另一个应用程序,如Gmail,WhatsApp等)。
 我的问题是,它是否甚至可能?我见过很多应用程序(你可以在图片中看到)并且不知道他们是如何做到的。

  

以下是我迄今为止在代码方面所做的工作。

要求1(工作)

我在清单中注册了android.intent.action.SEND意图过滤器的活动。 (这使我的活动出现在Chooser对话框列表中)

这是清单

<intent-filter>
       <action android:name="android.intent.action.SEND" />
       <category android:name="android.intent.category.DEFAULT" />
       <data android:mimeType="*/*" />
 </intent-filter>

要求2(不工作)

以下是检索数据的活动代码。

public class MyActivity extends AppCompatActivity{

    private TextView textView;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.phot_save_layout);
        textView = (TextView)findViewById(R.id.count);

        takeValueFunc();
    }

    public void takeValueFunc()
    {
        Intent shareIntent = getIntent();
        if(shareIntent.getAction().equals(Intent.ACTION_SEND))
        {
            String text = shareIntent.getStringExtra(Intent.EXTRA_TEXT);
        }
    }

}

我已经使用不同的浏览器进行了一些挖掘,并且我为同一图像读取了不同的值 我在StackOverflow How to get params from android.intent.action.SEND

上发现了类似的问题

但它没有回答我的问题。 :(

5 个答案:

答案 0 :(得分:1)

  

现在我想要我的应用程序...检索有关图像的信息(标题,网址,缩略图)

一般情况下这是不可能的。

欢迎您浏览the documented extras for ACTION_SEND。欢迎您提出自己的算法来决定如何解释这些额外内容。但是,您无需获得所需的信息。

例如,EXTRA_STREAM可能包含Uri。那个Uri应该有一个content计划。 Uri加上ContentResolver应该为您提供具体的MIME类型(因为Intent上的MIME类型可能是通配符)。如果是图像,您可以使用自己喜欢的图像加载库将图像加载到缩略图大小的视觉表示中。

但就是这样。

可能 EXTRA_TEXT和/或EXTRA_SUBJECT会保留您可能使用的其他信息,但不要求图片的HTTPS网址在那些。毕竟,可能 是图像的HTTPS URL,因为图像可能不在Internet上。同样,发送应用可能不会拥有“标题”,更不用说以某种方式将其作为ACTION_SEND的一部分发送。

答案 1 :(得分:0)

检查this链接,了解如何从其他应用接收数据。但是,您提供的示例并不适合该方案。 WhatsApp仅接收链接并自行生成预览。如果您想这样做,可以使用social metadata或类似的服务。

答案 2 :(得分:0)

我不确定哪些数据浏览器共享,但您可以分析它,因为它就是您所拥有的一切。

从意图中读取所有额外内容:

    Bundle extras = getIntent().getExtras();
    for (String key : extras.keySet()) {
        Log.d("Entry", String.format(Locale.US, "%s - %s", key, extras.get(key)));
    }

还有开放图形协议来获取网页预览,所以如果浏览器共享网址,那么你可以获得关于这个页面的元信息(标题,预览等)

使用opengraph获得的截图信息。

even the ones in the TensorFlow repo打开图表网站

通过facebook打开图形调试器:http://ogp.me/

注意:一些社交网络定义了他们描述页面预览的协议(例如https://developers.facebook.com/tools/debug/sharing/

我也找到了这个用于java的opengraph客户端:Twitter cards

答案 3 :(得分:0)

**我认为这段代码用于分享whatApp with Image的细节。**

            PackageManager pm = fragmentContext.getPackageManager();
            try {
                Intent waIntent = new Intent(Intent.ACTION_SEND);
                waIntent.setType("text/plain");
                if (Common.nonNull(bitmapUri))
                    waIntent.setType("image/*");
                String text = invite.getInviteMessage();
                PackageInfo info = pm.getPackageInfo("com.whatsapp", PackageManager.GET_META_DATA);
                waIntent.setPackage(info.packageName);
                waIntent.putExtra(Intent.EXTRA_TEXT, text);
                waIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
                startActivity(Intent.createChooser(waIntent, "Share with"));

            } catch (PackageManager.NameNotFoundException e) {
                Toast.makeText(fragmentContext, "WhatsApp not Installed", Toast.LENGTH_SHORT)
                        .show();
            }

答案 4 :(得分:0)

您想要的是Rich Link Preview Support.您可以create your own dynamic links获得丰富的预览支持。

另一方面,可以通过向活动添加意图过滤器来receiving simple datas from other app到您自己的应用,该活动代表能够处理AndroidManifest.

中的过程的活动