代码地址如下:
http://www.demodashi.com/demo/13292.html

前言

现在很多应用都有截图分享的功能,今天就来讲讲截图分享吧
今天涉及到以下内容:
1. android权限设置及申请
2. 截图分享功能解析
3. 截图分享功能的调用
4. 项目结构图和效果图

一. android权限设置及申请

在实现截图分享功能的的时候,会涉及到读写权限的申请问题。
第一步,你需要在mainfast.xml中注册读写权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

为了适应android6.0及以上手机的使用,我们最好也要加上6.0以上读写权限的申请。关于android6.0以上权限的申请,我之前封装过一个工具类,使得权限申请变得异常简单,有兴趣的同学可以看看我的另一篇文章:
android权限申请Permission
这里就不做详细解释了。

二.截图分享功能解析

2.1 原理

截屏分享的原理是首先获取当前屏幕的bitmap,然后将它生成图片文件保存到本地,接着调用分享功能,将它分享到你要分享的地方,下面做些讲解。

2.2 获取屏幕大小

在截屏开始的时候,需要获取屏幕的宽高:

        DisplayMetrics dm = new DisplayMetrics();WindowManager mWindowManager = (WindowManager) AppContext.getInstance().getSystemService(Context.WINDOW_SERVICE);Display display = mWindowManager.getDefaultDisplay();display.getMetrics(dm);int width = dm.widthPixels;int height = dm.heightPixels;

然后是获取屏幕的bitmap:

Bitmap bmp = view.getDrawingCache();
bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight);

获取bitmap之后,我们需要将bitmap保存到本地,保存之前,我们需要在手机上设置一个保存路径,sdard的判断必不可少:

        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {return true;}return false;

在sdcard存在的情况下,获取手机内部缓存路径:

File cacheFile = AppContext.getInstance().getExternalCacheDir();

然后将bitmap保存到本地:

            try {// 图片文件路径imagePath = getDiskCachePath()+"share.png";LogUtil.i("====imagePath====" + imagePath);File file = new File(imagePath);FileOutputStream os = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);os.flush();os.close();return imagePath;} catch (Exception e) {LogUtil.e("====screenshot:error====" + e.getMessage());}

这一切搞定后,调用分享功能:

        //分享if(StringUtil.isNotEmpty(path)){ShareImage(context,path);}

以上是对截屏分享的一个原理流程介绍,代码显得有些杂乱,不过不要紧,我已经将这些代码整合成一个工具类ShotShareUtil,方便大家调用,下面看看ShotShareUtil在mainActivity中的调用吧

三.截图分享功能的调用

直接给出MainActivity的代码吧,方便大家理解:

package com.android.testdemo.main;import android.view.View;
import android.widget.Button;import com.android.testdemo.R;
import com.android.testdemo.base.BaseActivity;
import com.android.testdemo.base.LogUtil;import butterknife.BindView;public class MainActivity extends BaseActivity{@BindView(R.id.button1)Button mBtnText;@Overrideprotected int getContentViewId() {return R.layout.activity_main;}@Overrideprotected void initData() {//这里需要检测android6.0以上读写权限,关于权限申请我之前已经讲过,有需要的同学可以参考以下链接//android6.0以上权限申请:http://www.demodashi.com/demo/12432.html}@Overrideprotected void setListener() {mBtnText.setOnClickListener(this);}@Overridepublic void onClick(View v) {super.onClick(v);switch (v.getId()) {case R.id.button1:LogUtil.i("=====截屏分享====");ShotShareUtil.shotShare(mContext);break;default:break;}}}

activity_main.xml文件中就布了一个按钮,方便测试:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.android.testdemo.main.MainActivity"><Button
        android:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:text="测试"app:layout_constraintTop_toTopOf="parent"tools:ignore="MissingConstraints"tools:layout_editor_absoluteX="148dp" /></android.support.constraint.ConstraintLayout>

最后给出项目结构图和效果图

四.项目结构图和效果图

项目结构图

运行效果图

Android实现截图分享qq,微信

代码地址如下:
http://www.demodashi.com/demo/13292.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

Android实现截图分享qq,微信相关推荐

  1. android分享图片到qq,Android实现截图分享qq,微信

    Android实现截图分享qq,微信 立即下载 金额: 3 元 支付方式: 友情提醒:源码购买后不支持退换货 立即支付 发布时间:2018-05-23 概述 android上封装工具类,一行实现截屏分 ...

  2. android微信分享gif图,android实现截图分享qq,微信

    前言 现在很多应用都有截图分享的功能,今天就来讲讲截图分享吧 今天涉及到以下内容: Android截屏 Android分享 效果图展示 ok,下面就来具体讲讲 一.权限,注意权限 先在自己的mainf ...

  3. Android移动开发之【Android实战项目】DAY11-App实现截图分享qq,微信

    前言 现在很多应用都有截图分享的功能,今天就来讲讲截图分享吧 今天涉及到以下内容: Android截屏 Android分享 效果图展示 ok,下面就来具体讲讲 一.权限,注意权限 先在自己的mainf ...

  4. android 分享qq微信朋友圈,H5微信JS-SDK实现分享朋友 朋友圈以及QQ自定义分享

    1.准备工作 APPID公众号id.申请好友分享接口.ip白名单.js接口安全域名设置(必须是通过备案).要先登录微信公众平台进入"公众号设置"的功能设置里填写"JS接口 ...

  5. Android第三方应用分享到微信朋友圈,微信好友(原创)

    首先,这篇博客是面向刚刚开始做Android开发的程序员的,大牛可以飘过.然后,作为一个接触Android一年多,还没有毕业的我来说,写的博客难免有些错误,所以请大家多多指教,看大家都在写博客,目的无 ...

  6. android 调用系统分享到微信,Android调用系统分享直接抵达微信

    前言 相对于使用微信官方的分享sdk,系统调用的分享到微信还是有很大的差异的. 系统分享而微信官方sdk分享的最大区别就是关于朋友圈分享,微信朋友圈对系统分享的限制是只允许分享照片.而对分享给联系人, ...

  7. android 多图分享到微信,Android 微信分享 多张图片

    备注: ①.这个不用导入微信的jar和注册微信的APP_ID . ②. 实际上分享时是调用系统本地的分享功能,所以分享的图片必须要保存到本地. ③. 保存到本地是耗时操作 分享的代码需要在子线程执行 ...

  8. ios android 截屏 分享,iOS微信截屏分享

    1.需求:將截屏后的圖片分享至微信好友或朋友圈. 2.問題:1.圖片縮略圖太大無法分享:2.分享的圖片不夠清晰. 3.描述:微信分享是需要設置兩張圖:需分享圖的縮略圖(大小有限制)和需分享的圖(要求高 ...

  9. android微信qq分享,android 一键分享 QQ 微信

    网上有很多介绍说有第三方集成工具,如sharesdk,这个操作太麻烦了. 如下介绍的是调用系统自带的,我这里是XML文件,对应的文件类型参见:// http://blog.csdn.net/wangy ...

最新文章

  1. ios button.imageview 和setimage的区别
  2. 02_记录学生相关数据,输出平均分数
  3. 圣诞夜,让你的代码都变成圣诞树吧!
  4. 使用socket获取网卡信息
  5. Bresenham 生成直线
  6. React Native 环境配置
  7. iOS手势操作简介(一)
  8. jax-rs配置_具有MicroProfile配置的可配置JAX-RS ExceptionMapper
  9. Java – HashMap详细说明
  10. 大数据 vr csdn_VR中的数据可视化如何革命化科学
  11. 1.4编程基础之逻辑表达式与条件分支 11 晶晶赴约会
  12. ajax error的报错提示
  13. 河南计算机考试照片要求,2020年河南地区国考照片处理工具使用流程详解(2)
  14. 华硕门店点亮系统_6大关键赋能,点亮导购服务力!
  15. presto----grouping sets/cube/rollup 函数
  16. cad如何多选对象,12种CAD图形对象选择方法总结
  17. 论文笔记 ACL 2020|Exploring Interpretability in Event Extraction: Multitask Learning of a Neural Event C
  18. homework2的进展
  19. The vertically scrolling ScrollView should not contain another vertically scrolling widget (ListView
  20. 【ubuntu系统下装win10双系统】

热门文章

  1. 日志分析系统分类有哪些_什么是网站日志分析需要分析哪些内容
  2. STM32驱动LCD实战
  3. 集成测试用例_如何评估测试用例的有效性?
  4. python 定时执行_python定时执行任务 轻量级
  5. 【Linux】Linux内核的整体架构简介
  6. as5300g2 nas软件功能_群晖NAS软件Qnote介绍及使用方法教程
  7. Nginx基本数据结构之ngx_str_t
  8. linux多线程学习(七)——实现“生产者和消费者”
  9. Linux netfilter源码分析(5)
  10. 内核并发控制---互斥量(来自网易)