关于JShare的8.0报错和PlatActionListener回调不准的问题

jiiiiiin
6年前 1.7k 0
  1. 在分享到qq的时候,8.0的安卓三星设备上报出:
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.csii.mobilebank/cn.jiguang.share.android.ui.JiguangShellActivity}: java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation

2.针对一下代码:

//....
shareBoard.setShareboardclickCallback((snsPlatform, platform) -> {
            switch (Platform.ACTION_SHARE) {
                case Platform.ACTION_SHARE:
                    final ShareParams shareParams = new ShareParams();
                    shareParams.setShareType(Platform.SHARE_IMAGE);
                    switch (platform) {
                        case "Wechat":
                        case "WechatMoments":
                        case "WechatFavorite":
                            shareParams.setImageData(bitmap);
                            shareListener.onCallShareApi();
                            JShareInterface.share(platform, shareParams, platActionListener);
                            break;
                        case "QQ":
                        case "QZone":
                            final String sdCardPath = Environment.getExternalStorageDirectory().getPath();
                            final String filePath = sdCardPath.concat(File.separator).concat(SHARE_TEMP_IMAGE_NAME);
                            File file = new File(filePath);
                            if (file.exists()) {
                                LoggerProxy.d("清除之前分享的临时图片 %s", filePath);
                                file.delete();
                            }
                            FileOutputStream os = null;
                            try {
                                os = new FileOutputStream(file);
                                bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
                                os.flush();
                                os.close();
                                PhotoAlbumUtils.savePhotoToMedia(activity, file, file.getName());
                                shareParams.setImagePath(filePath);
                                LoggerProxy.e("TODO 分享图片 qq");
                                shareListener.onCallShareApi();
                                JShareInterface.share(platform, shareParams, platActionListener);
                            } catch (IOException e) {
                                LoggerProxy.e(e, "存储分享bitmap出错");
                                ToastUtils.showLong("存储分享图片出错,请稍后再试");
                            }
                            break;
                        default:
                    }
                    break;
                default:
                    break;
            }
        });
        shareBoard.show();


ViewPlus.getHandler().post(() -> {
                final Bitmap bitmap = WebViewScreenShotsUtils.getWebViewBitmap(getDelegate().getActivity(), getWebView());
                final Activity activity = getDelegate().getActivity();
                try {
                    mShareBoard = showBroadViewShareTypeImage(activity, bitmap,
                            () -> JsBridgeCommHandler.callJs(getWebViewOrNullllll(), listener, EventResData.success().putData("share_img_screenshots_call_share_api", "调用了第三方分享接口").toJson()),
                            new PlatActionListener() {
                                @Override
                                public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
                                    JsBridgeCommHandler.callJs(getWebViewOrNullllll(), listener, EventResData.success().putData("platform", platform.getName()).toJson());
                                }

                                @Override
                                public void onError(Platform platform, int i, int i1, Throwable throwable) {
                                    JsBridgeCommHandler.callJs(getWebViewOrNullllll(), listener, EventResData.error("share_img_screenshots_err", "分享失败").putData("platform", platform.getName()).toJson());
                                }

                                @Override
                                public void onCancel(Platform platform, int i) {
                                    JsBridgeCommHandler.callJs(getWebViewOrNullllll(), listener, EventResData.error("share_img_screenshots_user_cancel", "用户取消分享").putData("platform", platform.getName()).toJson());
                                }
                            });
                } catch (ViewPlusException e) {
                    LoggerProxy.e(e, "分享出错");
                    ToastUtils.showLong(e.getMessage());
                    configShareImagePath(activity);
                    JsBridgeCommHandler.callJs(getWebViewOrNullllll(), listener, EventResData.error("share_img_screenshots_err_permission", "用户没有授权应用SD卡写权限,分享功能不能使用,请到应用管理中开启相应权限,再次尝试").toJson());
                }
            });



package cn.jiguang.share.android.api;

import java.util.HashMap;

public interface PlatActionListener {
    void onComplete(Platform var1, int var2, HashMap<String, Object> var3);

    void onError(Platform var1, int var2, int var3, Throwable var4);

    void onCancel(Platform var1, int var2);
}

PlatActionListener这个回调函数,存在两个问题,1.明明在对应平台分享成功了,很多时候调的是onCancel,2.在对应的回调函数里面调用jsbridge接口通知前端,对方往往接收不到通知(不要怀疑是我们的问题);

 @Override
                                public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
// 通知前端
                                    JsBridgeCommHandler.callJs(getWebViewOrNullllll(), listener, EventResData.success().putData("platform", platform.getName()).toJson());
                                }

我们会一直关注这个帖子,看看官方能不能给予解决。谢谢

2个回答

热门排序
  • 错误原因就如错误信息里说的,只有全屏不透明的才可以设置方向; 解决办法: 1、针对分享这个问题,你可以在AndroidManifest.xml中去掉activity方向的设置, android:screenOrientation="port 展示全部
  • 你所使用的 JShare SDK 的版本是多少?

    是只在 Android 8.0 上出现吗?低版本正常?