前言:前几天一个朋友说遇到一个问题,从海外天猫分享商品到自己的App中,当自己的App已经启动的时候是没问题得,但是如果自己的App不启动,多次分享的商品都是第一个商品。为了解决这个问题,我就写了一个demo来测试。
现在有很多的应用都会将知名应用中的商品分享到自己的App,要实现这个功能我们应该做些什么呢?
- 第一步:在自己的App中对应的activity在AndroidManifest.xml中配置属性。配置完成以后就能在分享中看到自己的App。
<activity
android:name=".GoodsDetailActivity"
android:screenOrientation="portrait">
<!-- 定义一个启动的过滤器 -->
<intent-filter>
<!-- 配置action为发送的类型 -->
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<!-- 定义媒体类型为文本类型 -->
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
- 第二步:在对应的activity中通过意图接收数据。
Intent intent = getIntent();
if (intent != null) {
String action = intent.getAction();
String type = intent.getType();
if (!TextUtils.isEmpty(action) && !TextUtils.isEmpty(type)) {
if (action.equals(Intent.ACTION_SEND) && type.equals("text/plain")) {
String str = intent.getStringExtra(Intent.EXTRA_TEXT);
Log.e(TAG, "分享过来的内容:" + str);
}
}
}
- 第三步:开始测试
- 效果图一:启动demo,打开aliexpress,分享商品详情到demo中。
从图中最后可以看出,两次分享的内容不一样。表示分享成功,没有问题。
- 效果图二:demo不启动,打开aliexpress,同样分享商品到自己的App中。
从效果图中可以看到,两次分享的内容一样。这里就出现了一个问题。首先排除aliexpress分享问题,从启动demo的结果可以确定。经过查询资料,了解到应该是由于缓存原因。
- 效果图三:对当前activity的manifest中添加
android:noHistory="true"
属性,然后再次测试。
<activity
android:name=".GoodsDetailActivity"
android:noHistory="true"
android:screenOrientation="portrait">
<!-- 定义一个启动的过滤器 -->
<intent-filter>
<!-- 配置action为发送的类型 -->
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<!-- 定义媒体类型为文本类型 -->
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
从效果图可以看出,两次分享内容符合实际,不再重复。解决了在demo未启动的情况下分享出现重复问题。
最后附上demo地址:ShareDemo