最近公司项目集成了融云,需求是系统相册图片或者截图,分享列表中有自己应用,并且可以分享到融云用户。

1.首先在目标页面的mainfast.xml之中设置
  <activityandroid:name=".im.activity.ContactListActivity"android:screenOrientation="portrait"><intent-filter><action android:name="这个是在main设置的action"/><category android:name="android.intent.category.DEFAULT"/></intent-filter><!--以下配置是在目标页面中配置,可以实现分享列表出现自己应用--><!--本次主要介绍图片类的分享,其他文件同样步骤--><intent-filter android:label="@string/app_name"><action android:name="android.intent.action.SEND"/><category android:name="android.intent.category.DEFAULT"/><data android:mimeType="image/jpeg"/></intent-filter><intent-filter android:label="@string/app_name"><action android:name="android.intent.action.SEND"/><category android:name="android.intent.category.DEFAULT"/><data android:mimeType="image/png"/></intent-filter></activity>

2.在目标接收页面做接收处理

 /*** 外部分享的文件*/private void getShareImageUri() {Intent itnIn = getIntent();Bundle extras = itnIn.getExtras();String action = itnIn.getAction();if (Intent.ACTION_SEND.equals(action)) {if (extras.containsKey(Intent.EXTRA_STREAM)) {try {Uri imageUri = extras.getParcelable(Intent.EXTRA_STREAM);// 返回路径imsgeUrl = UriUtil.getRealPathFromURI(ContactListActivity.this, imageUri);Bundle bun = new Bundle();bun.putString("Type", imsgeUrl);LoginInterceptor.interceptor(this, "这个是在main设置的action", bun);} catch (Exception e) {LogUtil.e(e.toString());}}} //   else if (extras != null) {//       if (extras.containsKey("Type")) {//          imsgeUrl = extras.getString("Type");//           isSysImageShare = true;//           mTitleBarTv.setText("发送给朋友");//       }//    }}

3.其实功能已经可以实现了,但是突然发现要考虑到账号是否登陆的情况,就有上面47 48 49 56-62行代码。这用到了登陆拦截,参考的链接

public class LoginInterceptor {public static final String mINVOKER = "INTERCEPTOR_INVOKER";/*** 判断处理** @param ctx    当前activity的上下文* @param target 目标activity的target* @param bundle 目标activity所需要的参数* @param intent 目标activity*/public static void interceptor(Context ctx, String target, Bundle bundle, Intent intent) {if (target != null && target.length() > 0) {LoginCarrier invoker = new LoginCarrier(target, bundle);if (getLogin(ctx)) {invoker.invoke(ctx);} else {if (intent == null) {intent = new Intent(ctx, LoginActivity.class);}login(ctx, invoker, intent);}} else {Toast.makeText(ctx, "没有activity可以跳转", Toast.LENGTH_SHORT).show();}}/*** 登录判断** @param ctx    当前activity的上下文* @param target 目标activity的target* @param bundle 目标activity所需要的参数*/public static void interceptor(Context ctx, String target, Bundle bundle) {interceptor(ctx, target, bundle, null);}// 这里获取登录状态,具体获取方法看项目具体的判断方法private static boolean getLogin(Context context) {//这里做是否登陆的判断 已经登陆返回true 没有登陆返回falsereturn false;}private static void login(Context context, LoginCarrier invoker, Intent intent) {intent.putExtra(mINVOKER, invoker);intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);context.startActivity(intent);}
}

这个就是实体类

public class LoginCarrier implements Parcelable {public String mTargetAction;public Bundle mbundle;public LoginCarrier(String target, Bundle bundle) {mTargetAction = target;mbundle = bundle;}/*** 目标activity** @param ctx*/public void invoke(Context ctx) {Intent intent = new Intent(mTargetAction);if (mbundle != null) {intent.putExtras(mbundle);}intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);ctx.startActivity(intent);}public LoginCarrier(Parcel parcel) {// 按变量定义的顺序读取mTargetAction = parcel.readString();mbundle = parcel.readParcelable(Bundle.class.getClassLoader());}@Overridepublic int describeContents() {// TODO Auto-generated method stubreturn 0;}@Overridepublic void writeToParcel(Parcel parcel, int flags) {// 按变量定义的顺序写入parcel.writeString(mTargetAction);parcel.writeParcelable(mbundle, flags);}public static final Parcelable.Creator<LoginCarrier> CREATOR = new Parcelable.Creator<LoginCarrier>() {@Overridepublic LoginCarrier createFromParcel(Parcel source) {// TODO Auto-generated method stubreturn new LoginCarrier(source);}@Overridepublic LoginCarrier[] newArray(int arg0) {// TODO Auto-generated method stubreturn new LoginCarrier[arg0];}};
}

同时记得在登录页设置

 if (invoker != null) {invoker.invoke(LoginActivity.this);} else {if (getIntent() != null) {invoker = getIntent().getParcelableExtra(LoginInterceptor.mINVOKER);if (invoker != null) {invoker.invoke(LoginActivity.this);}}}
<!--记得第二次在onNewIntent()方法里面接收值-->@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);invoker = (LoginCarrier) intent.getParcelableExtra(LoginInterceptor.mINVOKER);}

在目标页的onNewIntent()方法中也是第二次获取的时候取值

 @Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);if (intent != null) {Bundle extras = intent.getExtras();if (extras.containsKey("Type")) {imsgeUrl = extras.getString("Type");//要刷新页面getData();}}}
参考:

https://blog.csdn.net/qq_34983989/article/details/78438254

https://blog.csdn.net/xiaochouwangzi188/article/details/49768969

Android系统相册图片分享到自己应用内部相关推荐

  1. Android之如何分析手机系统相册图片和视频删除后保存的位置然后恢复文件,目前已经适配小米、OPPO、VIVO、一加、努比亚、魅族等手机。

    1 需求 需要获取各种型号手机系统相册图片和视频删除后保存的位置 2 分析 1)我们可以通过在sdcard目录下进行相关查找文件夹关键字,对 "cycle"或者"tras ...

  2. Android之如何分析手机系统相册图片和视频删除后保存的位置

    1 需求 需要获取各种型号手机系统相册图片和视频删除后保存的位置 2 分析 1)我们可以通过在sdcard目录下进行相关查找文件夹关键字,对 "cycle"或者"tras ...

  3. android系统通过图片绝对路径获取URI的三种方法

    老马的技术博客 android系统通过图片绝对路径获取URI的三种方法 最近做项目要通过图片的绝对路径找到图片的URI,然后删除图片,小小总结一下获取URI的方法,亲自试验在 android 4.1. ...

  4. Android获取系统相册图片选中地址,获取手机中的所有图片地址自定义相册

    一.获取手机中的值 1.首先在使用读写sd卡权限 2.获取手机中的所有图片: 注意代码中的getGalleryPhotos(getContentResolver()) 方法获取所有地址 获取所有图片地 ...

  5. android 系统相册 多远,【系统相册】Android 保存图片到系统相册

    保存完图片后,可以在内存设备的文件系统相册目录下看到对应图片(以小米手机为例,系统相册的路径为:/storage/emulated/0/DCIM/Camera).但是,使用系统图库无法马上看到该图片, ...

  6. android 本地图片uri格式不一致,Android本地相册图片URI转换绝对路径

    最近做毕设的时候遇到了这个问题,一直给我报错java.io.notFound啥的啥的,不管怎么修改路径都是报这个错误,今天终于解决了,记录一下解决过程. 首先我们调用系统相册. Intent inte ...

  7. Android获取相册图片

    1. AlertDialog的使用 2. 显示和隐式意图的区别 3. 相册页面的跳转 4. 选择完成后返回图片的获取 ----------------------------------------- ...

  8. iOS获取、写入系统相册图片

    ####为什么要调用系统相册 现在很多项目都会用到调用系统相册,例如保存图片到系统相册.选取相册中的图片.给联系人设置头像.聊天时给好友发送照片等.下面就看下如何调取系统相册: ####读取方式 *读 ...

  9. ios ipad里面调用系统相册图片不完整解决方法

    项目里面用到了系统相册,在手机里面取出来是完整的,但是在pad里面取出来就是不完整,只是取到左上角的一部分,开始查资料,最后的解决办法是,在调UIImagePickerController这个类时将这 ...

最新文章

  1. 【面向对象编程】(2) 类属性的定义及使用;__repr__()方法
  2. 如何捕获window.print点击打印或取消_原来1:1的CAD图纸要这样打印!学了这么久才知道...
  3. java类是如何加载的?不知道classLoader和双亲委派,不是一个合格的程序员
  4. 蚂蚁前端的开局十年:一切都在路上
  5. linux系统文件的复制,linux操作系统文件复制操作
  6. 我用微笑剪辑我的微电影 ---六月实习总结
  7. slf4j-api slf4j-log4j12以及log4j之间的关系
  8. JAVA中整型常量的长度_以下的 能正确表示Java语言中的一个整型常量。_学小易找答案...
  9. ASP.NET ASHX 一般处理程序教程
  10. cuda和cudnn下载安装
  11. centos长ping输出日志的脚本
  12. 【转载】VC项目配置基础
  13. 使用biopython查询NCBI数据库
  14. Centos 7.6 Install shc
  15. 中标麒麟Linux能运行wine吗,中标麒麟V6下wine完美运行通达信
  16. 关于robots协议
  17. c lua语言教程,Lua教程(三):C语言、C++中调用Lua的Table示例
  18. 科学型IT人才和工程型IT人才
  19. IMSI(MIN)介绍
  20. YUV2RGB Opencv

热门文章

  1. 基于ASP.NET的旅行社信息管理系统设计与实现
  2. 用数据讲故事 英文版_使用数据的十大策略讲故事
  3. 网综同质化的这一年,为何“剧情式”会胜出?
  4. 疫情影响企业发展能力?也许它能帮您摆脱困境
  5. 图片未经许可,不可引用(图片外链限制PHP实现原理)
  6. 【1万字搞懂】到底什么是CRM系统以及怎么选
  7. 内存泄漏一招搞定:valgrind
  8. 翻译mosHow to Switch to a New Undo Tablespace (文档 ID 1951695.1)使用新的undo表空间和删除旧的表空间
  9. 【智慧农业】农业物联网功能
  10. 计算机数控的发展历程,数控技术的发展趋势和发展过程