关于JShare的8.0报错和PlatActionListener回调不准的问题
- 在分享到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());
}
我们会一直关注这个帖子,看看官方能不能给予解决。谢谢