Android 接收微信、QQ其他应用打开,第三方分享

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

在AndroidManifest.xml注册ACTION事件

<activityandroid:name="com.test.app.MainActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:label="这里的名称会对外显示"android:launchMode="singleTask"android:screenOrientation="portrait">//注册接收分享<intent-filter><action android:name="android.intent.action.SEND" /><category android:name="android.intent.category.DEFAULT" />//接收分享的文件类型<data android:mimeType="image/*" /><data android:mimeType="application/msword" /><data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" /><data android:mimeType="application/vnd.ms-excel" /><data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /><data android:mimeType="application/vnd.ms-powerpoint" /><data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" /><data android:mimeType="application/pdf" /><data android:mimeType="text/plain" /></intent-filter>//注册默认打开事件,微信、QQ的其他应用打开<intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" />//接收打开的文件类型<data android:scheme="file" /><data android:scheme="content" /><data android:mimeType="image/*" /><data android:mimeType="application/msword" /><data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" /><data android:mimeType="application/vnd.ms-excel" /><data android:mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /><data android:mimeType="application/vnd.ms-powerpoint" /><data android:mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" /><data android:mimeType="application/pdf" /><data android:mimeType="text/plain" /></intent-filter></activity>

在用于接收分享的Activity里面加接收代码

  1. 当APP进程在后台时,会调用Activity的onNewIntent方法
  2. 当APP进程被杀死时,会调用onCreate方法

所以在两个方法中都需要监听事件

    @Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);receiveActionSend(intent);}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);receiveActionSend(intent);}

receiveActionSend方法如下

    public void receiveActionSend(Intent intent) {String action = intent.getAction();String type = intent.getType();//判断action事件if (type == null || (!Intent.ACTION_VIEW.equals(action) && !Intent.ACTION_SEND.equals(action))) {return;}//取出文件uriUri uri = intent.getData();if (uri == null) {uri = intent.getParcelableExtra(Intent.EXTRA_STREAM);}//获取文件真实地址String filePath = UriUtils.getFileFromUri(EdusohoApp.baseApp, uri);if (TextUtils.isEmpty(filePath)) {return;}//业务处理...}

获取真实路径getFileFromUri方法

    /*** 获取真实路径** @param context*/public static String getFileFromUri(Context context, Uri uri) {if (uri == null) {return null;}switch (uri.getScheme()) {case ContentResolver.SCHEME_CONTENT://Android7.0之后的uri content:// URIreturn getFilePathFromContentUri(context, uri);case ContentResolver.SCHEME_FILE:default://Android7.0之前的uri file://return new File(uri.getPath()).getAbsolutePath();}}

Android7.0之后的uri content:// URI需要对微信、QQ等第三方APP做兼容

  • 在文件管理选择本应用打开时,url的值为content://media/external/file/85139
  • 在微信中选择本应用打开时,url的值为 content://com.tencent.mm.external.fileprovider/external/tencent/MicroMsg/Download/111.doc
  • 在QQ中选择本应用打开时,url的值为 content://com.tencent.mobileqq.fileprovider/external_files/storage/emulated/0/Tencent/QQfile_recv/

第一种为系统统一文件资源,能通过系统方法转化为绝对路径;
微信、QQ的为fileProvider,只能获取到文件流,需要先将文件copy到自己的私有目录。
方法如下:

    /*** 从uri获取path** @param uri content://media/external/file/109009*            <p>*            FileProvider适配*            content://com.tencent.mobileqq.fileprovider/external_files/storage/emulated/0/Tencent/QQfile_recv/*            content://com.tencent.mm.external.fileprovider/external/tencent/MicroMsg/Download/*/private static String getFilePathFromContentUri(Context context, Uri uri) {if (null == uri) return null;String data = null;String[] filePathColumn = {MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.DISPLAY_NAME};Cursor cursor = context.getContentResolver().query(uri, filePathColumn, null, null, null);if (null != cursor) {if (cursor.moveToFirst()) {int index = cursor.getColumnIndex(MediaStore.MediaColumns.DATA);if (index > -1) {data = cursor.getString(index);} else {int nameIndex = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME);String fileName = cursor.getString(nameIndex);data = getPathFromInputStreamUri(context, uri, fileName);}}cursor.close();}return data;}/*** 用流拷贝文件一份到自己APP私有目录下** @param context* @param uri* @param fileName*/private static String getPathFromInputStreamUri(Context context, Uri uri, String fileName) {InputStream inputStream = null;String filePath = null;if (uri.getAuthority() != null) {try {inputStream = context.getContentResolver().openInputStream(uri);File file = createTemporalFileFrom(context, inputStream, fileName);filePath = file.getPath();} catch (Exception e) {} finally {try {if (inputStream != null) {inputStream.close();}} catch (Exception e) {}}}return filePath;}private static File createTemporalFileFrom(Context context, InputStream inputStream, String fileName)throws IOException {File targetFile = null;if (inputStream != null) {int read;byte[] buffer = new byte[8 * 1024];//自己定义拷贝文件路径targetFile = new File(context.getExternalCacheDir(), fileName);if (targetFile.exists()) {targetFile.delete();}OutputStream outputStream = new FileOutputStream(targetFile);while ((read = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, read);}outputStream.flush();try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}return targetFile;}

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/4759.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信公众号文章音视频下载的几种办法-涵盖PC端和手机端

很多时候我们在微信公众号的文章中发现有趣的视频或者音乐&#xff0c;但是苦于不能下载&#xff0c;这期刚好给大家安利几个下载微信公众号视频的办法&#xff0c;大家不要忘记关注科技毒瘤君微信公众号哦。 微信公众号文章视频下载的几种办法-涵盖PC端手机端-1 我这里介绍几种…

高效使用ChatGPT进行学习

ChatGPT作为一款对话式内容生成模型&#xff0c;拥有优秀的自然语言理解和生成能力&#xff0c;还拥有丰富的知识库。相比较于传统搜索引擎&#xff0c;它给出的答案更符合人们阅读习惯&#xff0c;用好它能让我们学习事半功倍。 思维的转变 传统搜索的思路 当我们碰到一个问题…

2023-ChatGPT解析及使用方法

什么是Chat GPT&#xff1f;我们能用它来干什么&#xff1f; Chat GPT是一款基于人工智能技术的自然语言处理模型&#xff0c;由OpenAI团队开发。它能够通过机器学习技术从海量文本数据中学习语言知识&#xff0c;实现自然语言生成、对话生成和语言理解等功能&#xff0c;使得…

办公软件中可以使用chatGPT吗?

随着ONLYOFFICE新品协作空间的发布&#xff0c;有很多朋友已经开始在工作区或桌面版用上chatGPT的朋友担心&#xff0c;在协作空间是否也可以正常使用chatGPT&#xff0c;我可以很负责的告诉大家&#xff0c;完全可以正常使用。 什么是ONLYOFFICE协作空间&#xff1f; 简言之&…

爆火的ChatGPT,能让自动驾驶成为老司机吗?

文丨光锥智能&#xff0c;作者丨周文斌 元宇宙已经凉透了&#xff0c;NFT也快淹死了&#xff0c;但中国互联网不知道&#xff0c;中国互联网不在乎&#xff0c;因为现在它的眼里只有ChatGPT...... 这是最近两个月来中国互联网的真实写照&#xff0c;大家都在为ChatGPT狂欢&…

[014量化交易] python 通过tushare 获取股票数据、名称、股票代码、指定股票名

# 导入tushare import tushare as ts# 初始化pro接口 pro ts.pro_api(填写你自己的key)# 拉取数据 df pro.daily(**{"ts_code": "000001.SZ","trade_date": "","start_date": 20220101,"end_date": 20220301,&q…

如何用ChatGPT写文章?只需要这3步,10倍提升写作效率

随着技术的不断进步和创新&#xff0c;我们的生活方式和工作方式也在不断变化。在日常工作中&#xff0c;越来越多的人使用人工智能和机器学习等技术提高效率减少时间成本。最近ChatGPT火出圈了&#xff0c;很多人通过使用ChatGPT提高了工作效率。那么&#xff0c;在写作领域&a…

2分钟用ChatGPT写一篇高质量文章

一、文章结构剖析 如果我们经常去写文章或者是去看别人的文章&#xff0c;你会发现文章分为以下几部分 标题 大纲 前言/导语 正文&#xff08;不同的结构&#xff09; 结尾 呼吁 当然了&#xff0c;如果我们去问 ChatGPT&#xff0c;也会得到类似的答案&#xff1a; 发送…

公司邮箱邮件一封也收不到怎么回事,什么原因?

在日常使用邮箱过程中&#xff0c;最烦心的事莫过于公司邮箱收不到邮件了&#xff0c;特别是客户发送的重要邮件&#xff0c;一旦收不到&#xff0c;就会极大的影响到正常工作。邮箱为何收不到邮件&#xff1f;邮箱邮件收不到怎么回事呢&#xff1f;其实&#xff0c;邮箱收不到…

gmail邮箱延迟收到问题

最近公司遇到了一个客户问题&#xff0c;发往gmail邮箱&#xff0c;客户收到延迟。公司老大分析了一天终于有了答案。闲下是我做了个整理把 经验分享下。 最近客户反馈&#xff0c;发送给gmail.com 和binance.com 的邮件, 收到有延迟,查看海外邮件中继服务器发信日志&#xff…

解决学校邮箱屏蔽邮件的问题/收不到邮件

问题:很多邮箱如QQ邮箱发的邮件会被学校邮箱误屏蔽截拦,并且不给提示,非常坑。 说明:西电邮箱可以这么解决,不知道其他学校邮箱能不能解决…… 登录:http://smg.stumail.xidian.edu.cn/gw/user/ 输入邮箱的账号和密码点击“个人设置”修改状态</

qq邮箱收不到通知邮件的解决方法

打开Q邮箱依次点击&#xff1a;邮箱首页->自助查询->收信查询&#xff0c;然后找到相应邮件点击后台的“添加到白名单”。以后再发邮件就能在收件箱看到了。

云原生周刊 | 让 ChatGPT 以电子邮件的方式来解释 KubeSphere

过去的一周是 ChatGPT 的狂欢&#xff0c;我猜每一位云原生玩家都很好奇他是如何看待 Kubernetes 的。咱们不防换个方式来提问&#xff0c;让它使用电子邮件的方式来向别人推荐 KubeSphere 和 OpenFunction。 开源项目推荐 Tailscale Ingress Controller 这是针对 Tailscale …

【原创】搭建一个Chat-GPT Proxy

由于众所周知的原因&#xff0c;Chat-GPT在国内无法使用。如果要使用的话&#xff0c;需要一定的科技含量。 账号获取 目前主流两种方式&#xff1a; 1、按照教程&#xff0c;自己注册。 2、直接购买一个账号。 直接注册的话&#xff0c;还需要一个开放国的手机号码&#xf…

国内免代理超级稳定使用chatgtp ,两个强大项目的联合,现在巨人肩上

内容涉及了腾讯云函数代理服务器的部署&#xff0c;和Chatgtp box项目即&#xff08;客户端和网页的使用&#xff09;。 一、获取Chatgtp的sip-key&#xff08;这一部分请自行百度&#xff09; 二、使用chatbox的客户端或者测试网页 chatbox是GitHub上的一个开源项目&#x…

中科院ChatGPT Academic开源安装使用过程中的网络代理问题

关于中科院ChatGPT Academic中小白会遇到的问题&#xff08;windows版&#xff09; ChatGPT Academic 的项目开源下载安装&#xff08;这里主要以windows为主&#xff09; 接下来就是大家会经常遇到问题的地方&#xff08;网络配置和API的输入&#xff09;这里就是针对小白的与…

chatgpt企业内应用

如果要开发ChatGPT企业内应用&#xff0c;可能需要实现以下一些功能&#xff1a; 内部知识库&#xff1a;利用ChatGPT技术搭建内部知识库系统&#xff0c;为企业员工提供快速、准确的查询和获取内部知识。 人力资源支持&#xff1a;提供职位招聘、入职培训、绩效考核等…

ChatGPT使用案例之画思维导图

ChatGPT使用案例之画思维导图 思维导图是做为我们工作中常见的工具,是发散性思维的极佳承载工具会鼓励我们探索不同的创作途径。在点子间寻找新的联系,激荡出更有创意的想法。 下面我们让ChatGPT 来帮我们做思维导图,但是需要注意的是ChatGPT并不能直接帮我们画出图,我们…

探索chatGPT在hr领域应用

应用汇总 各个指标项分 低、中、中高、高 四档 类型 应用点 GPT效果 应用实用价值 开发成本 推荐程度 面试 AI面试官 中 高 高 中 面试问题生成 高 中 低 中高 总结他人面试评价 中高 中 低 中 总结面试过程 高 中 低 中高 简历 简历解析 …

ChatGPT 如何影响网络安全世界?

这些天来,互联网非常忙于 ChatGTP。ChatGPT 是 Chat Generative Pre-trained Transformer 的缩写,是 OpenAI 开发的聊天机器人。人工智能有很多技能,比如编码、解谜、美化代码、解决科学问题等,潜在的用途还可以扩展到网络犯罪。在本文中,我们将重点关注 ChatGPT 对网络安…