Giter VIP home page Giter VIP logo

wxsharemultiimage's Introduction

WXShareMultiImage

基于无障碍服务实现微信多图分享。

Download

功能

  • 分享多图+文字给好友。
  • 分享多图+文字到朋友圈。
  • 可自定义引导用户打开无障碍服务的弹窗。
  • 朋友圈自动选图完成后可自动发布。

Gradle 依赖

添加 jitpack 仓库到项目的 build.gradle 文件中

allprojects {
    repositories {
      ...
      maven { url 'https://www.jitpack.io' }
    }
}

添加 WXShareMultiImage 依赖到应用的 build.gradle 文件中

implementation 'com.github.shichaohui:WXShareMultiImage:v2.0.1'

配置

在 strings.xml 中自定义无障碍服务标签。

<string name="wx_share_multi_image_service_label">ShareDemo【多图分享】</string>

权限

由于 SDK 涉及文件操作,请添加相关权限。

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

API

查看所有 API

使用方法

分享给好友

// 仅分享图片
WXShareMultiImageHelper.shareToSession(activity, bitmapList)

// 分享图片和文字
WXShareMultiImageHelper.shareToSession(activity, bitmapList, text)

分享到朋友圈

// 仅分享图片
WXShareMultiImageHelper.shareToTimeline(activity, bitmapList)

// 分享图片和文字,并设置本次分享是否自动发布
val options = WXShareMultiImageHelper.Options().apply {
    text = "待分享文案"
    isAutoFill = true
    isAutoPost = false
    needShowLoading = true
    onPrepareOpenWXListener = {
        // do something
    }
}
WXShareMultiImageHelper.shareToTimeline(activity, bitmapList, options)

WXShareMultiImageHelper.Options() 是分享可选配置。

  • text:待分享文案,默认空字符串 "" 。
  • isAutoFill:是否自动填充文案和图片,默认 true 。
    • true:自动填充文案和图片。尝试使用无障碍服务,若无障碍服务未打开,会弹窗引导用户打开服务。
    • false:手动填充文案和图片。
  • isAutoPost:填充文案和图片后是否自动发布,默认 false。该属性仅在 isAutoFill 为 true 时有效。
    • true:自动发布。
    • false:手动发布。
  • needShowLoading :是否显示默认的加载进度对话框,默认 true 。
  • onPrepareOpenWXListener:本次分享即将打开微信时的回调。可以在此处关闭自定义的加载进度对话框。

清理临时文件

分享时会产生临时文件,每次分享前都会自动清理临时文件夹,也可以自行调用 API 清理。

WXShareMultiImageHelper.clearTmpFile(activity)

判断无障碍服务是否可用

if(WXShareMultiImageHelper.isServiceEnabled(activity)) {
    // do something.
} else {
    // do something.
}

打开无障碍服务

// Kotlin
WXShareMultiImageHelper.openService(activity) {
    // 结果回调,it: Boolean 表示是否打开了无障碍服务。
    isServiceEnabled = it
}
// Java
WXShareMultiImageHelper.openService(activity, new ServiceManager.OnOpenServiceListener() {
    @Override
    public void onResult(boolean isOpen) {
        // do something.
    }
});

自定义引导弹窗

if (WXShareMultiImageHelper.isServiceEnabled(context)) {
    // 服务可用,直接分享
    WXShareMultiImageHelper.shareToTimeline(context, bitmapList)
    return
}
// 服务不可用,先弹窗引导用户打开服务,再根据结果分享
AlertDialog.Builder(context)
    .setCancelable(false)
    .setTitle("开启多图分享")
    .setMessage("到[设置->辅助功能->无障碍]开启多图分享至朋友圈功能。")
    .setPositiveButton("开启") { dialog, _ ->
        dialog.cancel()
        // 跳转到服务开关页面
        WXShareMultiImageHelper.openService(context) {
            // 服务开关页面关闭,执行分享
            val options = WXShareMultiImageHelper.Options()
            options.isAutoFill = it
            WXShareMultiImageHelper.shareToTimeline(context, bitmapList, options)
        }
    }
    .setNegativeButton("取消") { dialog, _ ->
        dialog.cancel()
        // 用户取消操作,执行分享
        val options = WXShareMultiImageHelper.Options()
        options.isAutoFill = false
        WXShareMultiImageHelper.shareToTimeline(context, bitmapList, options)
    }
    .show()

License

 Copyright 2018 StoneHui
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 
      http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and limitations under the License.

wxsharemultiimage's People

Contributors

shichaohui avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

wxsharemultiimage's Issues

自动发表按钮怎么获取呢?

非常感谢楼主写的自动化发圈,非常有参考价值,另外我想请教下,就是最后一步,需要自己点击发表按钮才能最终发朋友圈,可不可以也自动点击发表按钮呢?

微信分享多图时选不到图片,只是偶尔可以

微信分享多图时选不到图片,只是偶尔可以。没有改任何代码直接编译。

还有就是无障碍每次都要打开。 设置为打开后,重启手机。 首次打开app可以,后续又自动关掉了。

Api接口建议

新接口图片列表参数类型使用File,file bitmap转来转去浪费时间,大图bitmap还可能OOM

java.lang.ArrayIndexOutOfBoundsException: length=2; index=2

java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at android.util.LongArray.checkBounds(LongArray.java:220)
at android.util.LongArray.get(LongArray.java:169)
at android.view.accessibility.AccessibilityNodeInfo.getChild(AccessibilityNodeInfo.java:974)
at com.sch.share.service.WXShareMultiImageService.selectImage(WXShareMultiImageService.kt:162)
at com.sch.share.service.WXShareMultiImageService.onAccessibilityEvent(WXShareMultiImageService.kt:60)
at android.accessibilityservice.AccessibilityService$2.onAccessibilityEvent(AccessibilityService.java:1538)
at android.accessibilityservice.AccessibilityService$IAccessibilityServiceClientWrapper.executeMessage(AccessibilityService.java:1724)
at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:37)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7087)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:928)
Back traces ends.

自动打开相册是报错

报了这个错,
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.view.accessibility.AccessibilityNodeInfo.performAction(int)' on a null object reference
at com.sch.share.WXShareMultiImageService.openAlbum(WXShareMultiImageService.java:186)
at com.sch.share.WXShareMultiImageService.onAccessibilityEvent(WXShareMultiImageService.java:76)

麻烦楼主看看

图片缺失,引起图片选择错乱问题

情况是这样,选择的9张图片调用了作者的方法,此时确认9张bitmap都传到了方法里,但是无障碍界面的瘦,微信选择图片的界面里会缺失两张,导致选错图片

关于微信分享给好友使用Uri.fromFile的疑问

场景:分享图片给好友
你好,我想请问一下在 Android N 以上不是禁止通过 file:// 跨app分享文件了吗,并且需要使用 FileProvider 方式来进行跨 app 分享文件,想请问下通过 Uri.fromFile 方式还能分享图片到微信的原因

开启无障碍服务后,多图分享到朋友圈时,有一定的概率不会自动选图

如题,debug查看后发现findNodeInfo(AccessibilityNodeInfo rootNodeInfo, String className)这个方法有时候返回值会为null,从而导致程序中断执行了。
比如说选择图片时执行到
AccessibilityNodeInfo gridView = findNodeInfo(rootNodeInfo, GridView.class.getName());
gridView取值有时候会为null导致程序中断了,后面要自己手动选择照片。
请问这个有什么方法可以避免吗?
另外请教一个题外话题,如下图,这个应该是android的系统分享功能,我按照您的这篇分享添加了多图分享到朋友圈的功能,但是如红框中标示的名称不知道怎么自定义,不知道您能提供帮助,谢谢了。
image

无障碍服务权限开启,但是不自动发布

微信7.0.4;
Demo正常运行;
集成项目后,
辅助功能中已经开启自定义的无障碍服务,但是总是走这个逻辑
自动跳转微信,并提示用户打开朋友圈粘贴文字选择图片。
请问这可能是什么原因?

android Q 适配问题

targetSDKVersion升级到29后,FileManager类的getTmpFileDir函数会调用 val parent = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);导致FileManager类中clearTmpFile函数执行fileDir.listFiles()会返回null,导致自动选图失败。

大佬你好,9.0启动以后进入朋友圈无法自动分享

大佬你好,我现在遇到的问题是在Android9.0以后现在已知的是所有手机最多能自动分享一次到最后的为你选好照片等待发布.
之后所有的手机都出现了打开朋友圈然后弹出拍摄和从相册选择 这个POPwd,甚至 会直接只走到微信主页然后就停止了,求大佬们给一点方案.或者拉我进个群也行(WX,QQ 735510971)谢谢

9.0分享问题

你好,发现 9.0系统无法唤起微信,手动启动微信不会自动打开朋友圈,也不会复制,是否是系统层禁止了服务调用,或者说是相关API发生了改变?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.