admin管理员组

文章数量:1608851

    项目中的分享用的友盟,但是发现分享图片的时候,微信好友,和qq空间是不能够直接分享图片的,分享的图片会转成一个url的形势。
    但是要求必须分享出去一张图片。网上查询资料后发现微信好友可以通过谷歌的**ComponentName**指定另一个app中的activity。
    搜索之后微信好友打开发送图片的配置,如下:
        这里写代码片ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");
        如果想分享一张图片就可以这么来写:

private static void shareWeChat(Bitmap bitmap,Context context){
String path=MyUnitls.getFileUrl(bitmap, false, context);
Uri uriToImage = Uri.fromFile(new File(path));
Intent shareIntent = new Intent();
ComponentName comp = new ComponentName("com.tencent.mm","com.tencent.mm.ui.tools.ShareImgUI");
shareIntent.setComponent(comp);
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/*");
context.startActivity(Intent.createChooser(shareIntent, "是否安装微信?"));
}

如果哪天腾讯把包名给改了,这样当然也是会失败的。
这是朋友圈的 ComponentName componentName = new ComponentName(“com.tencent.mm”, “com.tencent.mm.ui.tools.ShareToTimeLineUI”);
QQ的 ComponentName componentName = new ComponentName(“com.tencent.mobileqq”, “com.tencent.mobileqq.activity.JumpActivity “);

如果想直接分享文字信息也是可以的,只需改变携带参数,但是好像不能做到同时分享的

intent.putExtra(Intent.EXTRA_SUBJECT, “消息标题”);
intent.putExtra(Intent.EXTRA_TEXT, “消息内容”);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

接下来介绍获取app的包名跟入口的activity的方法

“`
public void test(){
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
PackageManager mPackageManager = this.getPackageManager();
List mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0);
//按报名排序
Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager));

    for(ResolveInfo res : mAllApps){
        //该应用的包名和主Activity
        String pkg = res.activityInfo.packageName;
        String cls = res.activityInfo.name;
        Log.d("抓包","pkg_clspkg---" +pkg +"  cls---" + cls);

    }
}

把这段代码运行后,就可以在log中看到包名和入口了。

解决了微信,但是还有qq空间,可是只找到了qq空间APP的这种方式而没有qq直接启动的,查阅发现虽然QQ现在设置的QQ空间分享为统一样式,
不允许单独设置图片,但是也可以设置参数单独分享图片,设置如下

final Bundle params = new Bundle();
//本地地址一定要传sdcard路径,不要什么getCacheDir()或getFilesDir()
params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, iamgeid);
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, “云镶健康+”);
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); //打开这句话,可以实现分享纯图到QQ空间
doShareToQQ(params,context);
public static void doShareToQQ(final Bundle params,final Activity context) {
// QQ分享要在主线程做
final Tencent mTencent;
mTencent = Tencent.createInstance(“你在qq上申请的id”, context);
ThreadManager.getMainHandler().post(new Runnable() {

        @Override
        public void run() {
            if (null != mTencent) {
                mTencent.shareToQQ(context, params, new IUiListener() {
                    @Override
                    public void onComplete(Object o) {
                    }

                    @Override
                    public void onError(UiError uiError) {

                    }

                    @Override
                    public void onCancel() {

                    }
                });
            }
        }
    });
}

qq空间接收的是手机图片的路劲,这样传递之后就解决了qq空间分享问题。

本文标签: 第三方图片android