当前位置: 首页 > 知识库问答 >
问题:

如何截取当前活动的截图然后分享?

鄢子平
2023-03-14

我需要截取活动的屏幕截图(没有标题栏,用户不应看到屏幕截图实际上已被拍摄),然后通过操作菜单按钮“共享”共享它。我已经尝试了一些解决方案,但它们对我不起作用。有什么想法吗?

共有3个答案

何承
2023-03-14

此方法不需要存储和检索屏幕截图以便再次共享。在方法调用中,您将能够共享屏幕截图。

private Bitmap screenShot(View view) {
    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(),view.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    view.draw(canvas);
    return bitmap;
}

private void share(Bitmap bitmap){
    String pathofBmp=
            MediaStore.Images.Media.insertImage(ctx.getContentResolver(),
                    bitmap,"title", null);
    Uri uri = Uri.parse(pathofBmp);
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.setType("image/*");
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Star App");
    shareIntent.putExtra(Intent.EXTRA_TEXT, "");
    shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
    ctx.startActivity(Intent.createChooser(shareIntent, "hello hello"));
}

像这样调用此方法

share(screenShot(view));

通过使用此直接共享屏幕截图而无需阅读

茹轩昂
2023-03-14

单击监听器创建共享按钮

    share = (Button)findViewById(R.id.share);
    share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Bitmap bitmap = takeScreenshot();
            saveBitmap(bitmap);
            shareIt();
        }
    });

添加两个方法

    public Bitmap takeScreenshot() {
    View rootView = findViewById(android.R.id.content).getRootView();
    rootView.setDrawingCacheEnabled(true);
    return rootView.getDrawingCache();
    }

public void saveBitmap(Bitmap bitmap) {
    imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png");
    FileOutputStream fos;
    try {
        fos = new FileOutputStream(imagePath);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }
}

共享屏幕截图。在此处共享实现

    private void shareIt() {
    Uri uri = Uri.fromFile(imagePath);
    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
    sharingIntent.setType("image/*");
    String shareBody = "In Tweecher, My highest score with screen shot";
    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "My Tweecher score");
    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
    sharingIntent.putExtra(Intent.EXTRA_STREAM, uri);

    startActivity(Intent.createChooser(sharingIntent, "Share via"));
    }
易琛
2023-03-14

我就是这样截屏分享的。

首先,从当前活动中获取根视图:

View rootView = getWindow().getDecorView().findViewById(android.R.id.content);

其次,捕获根视图:

 public static Bitmap getScreenShot(View view) {
       View screenView = view.getRootView();
       screenView.setDrawingCacheEnabled(true);
       Bitmap bitmap = Bitmap.createBitmap(screenView.getDrawingCache());
       screenView.setDrawingCacheEnabled(false);
       return bitmap;
 }

第三,将位图存储到 SD 中:

public static void store(Bitmap bm, String fileName){
    final static String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Screenshots";
    File dir = new File(dirPath);
    if(!dir.exists())
        dir.mkdirs();
    File file = new File(dirPath, fileName);
    try {
        FileOutputStream fOut = new FileOutputStream(file);
        bm.compress(Bitmap.CompressFormat.PNG, 85, fOut);
        fOut.flush();
        fOut.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

最后分享当前Activity的截图:

private void shareImage(File file){
    Uri uri = Uri.fromFile(file);
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_SEND);
    intent.setType("image/*");

    intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "");
    intent.putExtra(android.content.Intent.EXTRA_TEXT, "");
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    try {
        startActivity(Intent.createChooser(intent, "Share Screenshot"));
    } catch (ActivityNotFoundException e) {
        Toast.makeText(context, "No App Available", Toast.LENGTH_SHORT).show();
    }
}

我希望你能从我的代码中得到启发。

更新:

将以下权限添加到您的AndroidManifest.xml

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

因为它创建和访问外部存储中的文件。

更新:

从Android 7.0开始,Nougat共享文件链接被禁止。要解决这个问题,您必须实现FileProvider并共享“content://”uri not“file://”uri。

这里有一个很好的描述如何去做。

 类似资料:
  • 问题内容: 我希望用户在Swift中以编程方式按下按钮后继续运行我的应用并为应用截图。我知道需要截图,但是我不需要整个屏幕的图片。我希望弹出一个矩形(有点像裁剪工具),并且用户可以拖动矩形并调整其大小以仅截取屏幕的特定部分的屏幕截图。我希望矩形经过a 并裁剪Web视图的图片。 问题答案: 标准的快照技术是,将其绘制到图像上下文。在iOS 10及更高版本中,您可以使用: 而且您会这样使用: 在iOS

  • 前端使用vue,后端使用springboot,前后端分离,且已解决跨域,登录采用jwt验证 想实现功能:如果用户通过url栏输入地址方式来访问某个页面(非登录页),对未登录用户自动跳转登录页面 请问拦截器是设置在后端还是设置在前端?另外对于静态页面能拦截吗

  • 自动化截图-应用分发时的自动截图方案 > 原文链接 : Screenshots Through Automation 作者 : Flavien Laurent 译者 : chaossss 校对者: sundroid 状态 : 校对完成 在发布 App 到应用商店时有一件的事情不得不做,就是上传最新的高清无码截图到应用商店上。可是如果你的 App 有许多页面,那你每次发布更新都可能是一场梦魇,因为你

  • 问题内容: 我为此进行了很多搜索,但找不到解决方案。这是java中可能的解决方案的类似问题。 Python中有类似的解决方案吗? 问题答案: 除了硒以外,此示例还需要PIL映像库。有时将其作为标准库之一放入,有时却不作为,但如果没有,则可以使用 最后输出是… Stackoverflow徽标!!! 当然,现在仅获取静态图像将是过大的选择,但是如果您想要获取需要Javascript才能实现的功能,那可

  • 问题内容: 我需要通过URL对网站进行全屏拍摄,是否有用于该网站或服务的PHP程序,如果没有,是否有用于该目的的Java程序? 问题答案: 有很多方法: 使用http://khtml2png.sourceforge.net/index.php?page=faq 使用带有一些绑定的webkit引擎:http : //www.blogs.uni-osnabrueck.de/rotapken/2008/

  • 我只需要当前视口的屏幕截图,特别是滚动位置。基本上是当前Chrome驱动程序所做的。 据我所知,这似乎是完全可能的,但出于某种原因,屏幕截图命令总是努力拍摄完整的文档屏幕截图。事实上,IE驱动程序拍摄多个视口快照,然后将它们缝合在一起。 我使用的是Ruby webdriver,但我看不到任何东西,只能截取视口的屏幕。可能吗?

  • 问题内容: 是否可以使用JavaScript截取网页的屏幕截图,然后将其提交回服务器? 我不太担心浏览器的安全性问题。等,因为实施将针对HTA。但是有可能吗? 问题答案: 我已经通过使用ActiveX控件为HTA完成了此操作。在VB6中构建控件以截取屏幕截图非常容易。我必须使用keybd_event API调用,因为SendKeys无法执行PrintScreen。这是该代码: 这只会使您到达将窗口

  • 本文向大家介绍Android 获取浏览器当前分享页面的截屏示例,包括了Android 获取浏览器当前分享页面的截屏示例的使用技巧和注意事项,需要的朋友参考一下 今天在项目中碰见这么一个需求:获取 Chrome 浏览器分享时,页面的截屏。静下来一想,既然是分享,那么肯定得通过 Intent 来传递数据,如果真的能获取到 Chrome 分享页面时的截屏,那么 Intent 的数据中,一定有 .jpg