直接在屏幕上,选取区域进行截屏分享到QQ、微信

在手机屏幕上,选择某个区域进行截屏。

  • 1,借用网络上一张图片,说明每个点的位置,主要是左上角和右下角这两个点。中间那块浅蓝色的就是我们的目标区域了
    这里写图片描述
    /*** 将一个view保存成图片* @param view 传入的目标view* @return*/public static Bitmap loadBitmapFromView(View view) {view.setDrawingCacheEnabled(true);view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);view.setDrawingCacheBackgroundColor(Color.WHITE);int w1 = view.getLeft();int h1 = view.getTop();//int w2 = view.getWidth()+view.getLeft();//int h2 = view.getHeight()+view.getTop();//相当于上面的int w2 = view.getRight();int h2 = view.getBottom();//w2-w1, h2-h1这个两个参数要注意一下,要不图片的背景色和图片的大小不一Bitmap bmp = Bitmap.createBitmap(w2-w1, h2-h1,Bitmap.Config.ARGB_8888);Canvas c = new Canvas(bmp);c.drawColor(Color.WHITE);/** 如果不设置canvas画布为白色,则生成透明 */view.layout(w1, h1, w2, h2);view.draw(c);return bmp;}
  • 2,接下来就是保存我们第一步截出来的图片
    /*** 保存图片到本地* */public void saveBitmap(Context context, Bitmap bitmap) {String sdCardDir = Environment.getExternalStorageDirectory() + "/DCIM/";File appDir = new File(sdCardDir, "cache");//文件夹名称if (!appDir.exists()) {appDir.mkdir();}//文件名,这里你是如果要保存到本地,每次保存的图片的名称都得不一样//文件名加一个当前时间就好:System.currentTimeMillis() String fileName = "InvitationCard_" + "chuangqi.jpg";mFile = new File(appDir, fileName);try {FileOutputStream fos = new FileOutputStream(mFile);bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);fos.flush();fos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}Log.d("Tag-----", appDir+fileName);//这里做一个简单的打印}
  • 3,接下来就是分享图片,这里用的是开放平台上的SDK,只做关键代码的分析。不是友盟和sharesdk的

    • 微信
    /*** 邀请卡的分享* 微信、朋友圈分享* @param flag  0是分享给微信好友,1是分享到朋友圈*/public void shareCard(int flag) {waitDialog.show();if (!wxApi.isWXAppInstalled()) {Toast.makeText(this, "您还未安装微信客户端", Toast.LENGTH_SHORT).show();waitDialog.dismiss();return;}Bitmap thumb = null;/**主要路径尽量主要写,不能直接写死,因为不用手机保持时的路径有所不同,下面两个就是例子*/storage/sdcard0/DCIM/cacheInvitationCard_chuangqi.png*/storage/emulated/0/DCIM/cacheInvitationCard_chuangqi.jpg*/File file = new File(Environment.getExternalStorageDirectory()+"/DCIM/cache/InvitationCard_chuangqi.jpg");if (file.exists()){thumb = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/DCIM/cache/InvitationCard_chuangqi.png");}WXImageObject imageObject = new WXImageObject(thumb);WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = imageObject;msg.title = "标题";msg.description = "描述";SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("image/*");//请求的唯一标识req.message = msg;req.scene = flag == 0 ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;boolean fla = wxApi.sendReq(req);waitDialog.dismiss();//测试用的,通过下面标记fla判断是否能调起客户端,true就是可以//Toast.makeText(this, "微信客户端"+"fla=" + fla, Toast.LENGTH_SHORT).show();}使用://分享到微信好友shareCard(0);//分享到微信朋友圈shareCard(1);
  • QQ
    /*** 邀请卡的分享* 微信分享在activity中写* 分享到QQ* @param type  1是分享给好友,2是分享到QQ空间*/public void shareQQCard(int type) {if (!SystemUtils.checkMobileQQ(BaseActivity.this)) {Toast.makeText(BaseActivity.this, "您还未安装QQ客户端", Toast.LENGTH_SHORT).show();return;}Bundle params = new Bundle();params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "应用名称");params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, Environment.getExternalStorageDirectory()+"/DCIM/cache/InvitationCard_chuangqi.png");params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);if (type == 1) {params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN);}mTencent.shareToQQ(BaseActivity.this, params, new BaseUiListener());//Log.d("Tags-", imagePath);//Toast.makeText(this, "QQ客户端"+"type=" + type, Toast.LENGTH_SHORT).show();}使用://分享到微信好友shareQQCard(1);//分享到微信朋友圈shareQQCard(2);

  • 还有一种相当简单的分享方式,直接调起客户端。下面是微信的,没有安装客户端可能程序会奔溃,所以最好先判断一下是否已经安装了客户端
//直接用微信给我们留的分享界面,注意这个路径,在存储时打印就知道了
Uri imageUri = Uri.fromFile(new File("/storage/sdcard0/DCIM/cache/InvitationCard_chuangqi.png"));
Intent shareIntent = new Intent();
ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");//包名和界面的路径,这个是分享给微信好友的
//ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");//包名和界面的路径,这个是分享给微信朋友圈
shareIntent.setComponent(comp);
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "分享图片"));

不过这种简单的方式,不知道如何监听它的回调(分享成功、失败、取消),如果有知道请也告诉我一下,虚心求教!


部分手机分享失败(华为6.0以上的手机),需要动态请求权限,参考下面这个:

  • 动态申请权限:http://blog.csdn.net/qq_32519693/article/details/74936847

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

android qq悬浮窗口,qq悬浮窗口在哪里打开?怎么设置QQ悬浮窗?qq悬浮窗口设置方法分享...

QQ悬浮窗口在哪打开 qq悬浮 1.打开手机设置应用,点击进入设置界百面。 2.在设置应用中,选择“其他度应用管理”选问项。 3.打开选择答已经安装的应用,选择“QQ”。 4.点击“权限回管理”,进入权限管理界面。 5.点击“显示悬浮窗”…

qq三国行脚商脚本思路分享

qq三国行脚商玩法基于按键精灵脚本写作思路分享 欢迎和我一起学习讨论游戏脚本的写作过程游戏玩法简介脚本写作思路知易行难后续痛点和优化自我介绍后记 欢迎和我一起学习讨论游戏脚本的写作过程 你好呀! 这是你第一次来到我的主页。如果你想学习如何使用按键精灵等…

QQ微信等分享链接时系统提取的标题和图片代码

有的时候,在我们写好网页后,需要通过QQ/微信等即时通讯工具分享出去,这时候,系统会提取网页的标题和图片,默认提取title和网页的第一张图片。 当然,我们也可以指定分享的文字和图片。以图片为例&#xff0…

远程屏幕共享软件哪个比较好用

我们远程开会需要共享屏幕来讨论会议内容,我们远程培训需要共享屏幕让学生一目了然自己要讲的内容;我们远程运维需要共享屏幕让工程师可以协同远程运维。那么共享屏幕软件哪个比较好用? 相信提到共享屏幕软件,我们首先想到的就是q…

QQ分享功能实现-Android

这篇主要介绍实现QQ的分享图片功能,这里用QQ官方提供的SDK。QQ的分享功能直接使用,不需要授权软件,所以比较方便。 一、准备工作 1、创建应用 腾讯QQ互联官网进行注册登录,并且创建应用管理,,获取到你的…

计算机桌面文件如何发送给qq好友,QQ怎么与好友分享屏幕 如何共享电脑屏幕给好友...

手机QQ有屏幕共享吗? 如果有 怎么共享呢 手机qq现在还有共享屏幕的功能对不起现在只有电脑版的才能共享屏幕 手机qq中的分享屏幕怎么用 还在为好友寻求帮助而烦恼吗?来试试屏幕分享吧,它可以让你的好友亲临其境的观看你的电脑屏幕发生的事情。…

解决QQ分享屏幕对方无法听到电脑系统声音的问题

0x00 方法一 也就是网上主流的通过设置立体声混音为默认设备,这种方法有弊端,只能实现以下两种效果: 1.能听到电脑系统声音,而人说话无声 2.电脑声音和人声都有,但是你会听到自己说话的回声。 话不多说&#xff0…

Web安全神器-Burpsuite社区版/专业版下载、安装及使用教程

一、Burpsuite下载 Burp Suite是进行Web应用安全测试的一个集成平台,无缝融合各种安全工具并提供全面的接口适配,支持完整的Web应用测试流程,从最初的映射和应用程序的攻击面分析到发现和利用安全漏洞等领域均适用,同时还可以做抓…

react学习

简介 起源于Facebook与传统mvc的关系:轻量级的视图层库,将视图抽象成组件 特点 声明式设计高效 通过虚拟dom,减少真实dom交互灵活 适配已知的库或框架jsx js语法扩展组件 代码可复用单向响应数据流 减少重复代码,比传统…

【C++】vector的使用

目录 1.什么是vector2.容量操作3.增删查改4.杨辉三角(使用vector开辟二维数组) 1.什么是vector vector就是一个动态顺序表,比起string,它不仅可以存储字符,还可以存储其他的内置类型以及自定义类型。 vector在使用时&…

Maven jar 包下载失败问题处理【配置Maven国内源】

前言 很多同学在Maven里下载一些依赖的时候,即下载【jar 包】的时候总是会出现一些问题,这里专门做一个教程讲解一下 其实这和你的Maven配置是有关系的,因为Maven是一个国际站点,它的仓库是在国外的,所以我们有时候在下…

易语言零基础新手入门系列教程 第一课

机器人小鑫易语言源码(作业用): 机器人小鑫源码 - 第一课.zip 视频教程文字版: 新手学习易语言的几点建议 1、由浅入深、由易到难、循序渐进,切勿急功近利,想一步登天! 这是学习的一般规…

是否想过中文编程呢?易语言使用的体验和感想

对于很多自以为英语不好就不能学好编程的童鞋来说,其实编程和英语真的不是那么的紧密,易语言可能是一种不错的选择。这里我们来体验一下,和其他语言做一下对比。 一、变量的声明 易语言中用ctrll和ctrlG来声明局部和全局变量,代码…

这次,易语言彻底“输了”,而另一新式中文编程却胜券在握

20多年来,饱受诟病的易语言 众多编程语言中,python、C、C语言、Java等,脱颖而出。但有一门冷门的编程语言, 大多数人可能听都没听过,它就是易语言。 什么是易语言啊?听起来好陌生。 笔者“深扒”了一下&…

易语言脚本开发入门教程

天蓝易语言脚本入门开发系列教程第1讲初识易语言 天蓝易语言脚本入门开发系列教程第2课简单控件变量 天蓝易语言脚本入门开发系列教程第3讲简单登录器制作 天蓝易语言脚本入门开发系列教程第4讲计算器实现 天蓝易语言脚本入门开发系列教程第5讲时钟随机数 天蓝易语言脚本入门开…

易语言学习笔记——基础篇

易语言学习笔记20180710 一、 易语言的数据类型可以分为基本数据类型和特殊数据类型 1. 其中基本数据类型分为: ① 数值型 ② 逻辑型 ③ 日期时间型 ④ 文本型 ⑤ 字节集型 ⑥ 子程序指针型 2. 然后基本数据类型中的数值类型有包含了&a…

易语言简介

易语言(EPL)是一门以中文作为程序代码编程语言,其以“易”著称,创始人为吴涛。易语言早期版本的名字为E语言。其最早的版本的发布可追溯至2000年9月11日。创造易语言的初衷是进行用中文来编写程序的实践,方便中国人以中…

“易语言.飞扬”十分钟入门教程

“易语言.飞扬”十分钟入门教程 作者:liigo 2007.1.1 原文链接:http://blog.csdn.net/liigo/archive/2007/01/01/1472077.aspx 转载必须注明出处:http://blog.csdn.net/liigo 第 1 分钟:序曲 第 2 分钟:“易语言.飞…

《MYSQL必知必会》读书笔记1

目录 行 主键 MYSQL工具 使用MYSQL 连接 检索数据 检索(SELECT) 限制结果(LIMIT) 排序检索(ORDER BY) 过滤数据(WHERE) 过滤数据(AND、OR) 通配符…

【SpringCloud】SpringAMQP

文章目录 1、AMQP2、基本消息模型队列3、WorkQueue模型4、发布订阅模型5、发布订阅-Fanout Exchange6、发布订阅-DirectExchange7、发布订阅-TopicExchange 1、AMQP Advanced Message Queuing Protocol,高级消息队列协议。是用于在应用程序之间传递业务消息的开放标…