QQ分享功能实现-Android

Posted hequnwang10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QQ分享功能实现-Android相关的知识,希望对你有一定的参考价值。

这篇主要介绍实现QQ的分享图片功能,这里用QQ官方提供的SDK。QQ的分享功能直接使用,不需要授权软件,所以比较方便。

一、准备工作

1、创建应用

腾讯QQ互联官网进行注册登录,并且创建应用管理,,获取到你的APP ID和APP Key。这里我已经完成了

2、集成SDK

QQ互联的官方文档下载SDK,并将jar包导入项目中,这里我已经导入完成了。按照官方文档的步骤一步一步的完成。

二、代码

1、将open-sdk.jar加入编译路径

在app目录下的build.gradle中添加

dependencies {
    implementation fileTree(dir: 'libs', include: '*.jar')
}

然后重新导入一下,这样open-sdk就会导入进来了。

2、配置androidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


 <activity
            android:name="com.tencent.tauth.AuthActivity"
            android:launchMode="singleTask"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="tencent+你的id" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:configChanges="orientation|keyboardHidden"
            android:screenOrientation="behind"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

注意 "tencent+你的id"这个地方:如果你的id是123456,那么android:scheme:这个地方你要写成tencent123456。

3、布局文件activity_avatarupload.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/scrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <Button
            android:id="@+id/share"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="QQ分享"
            app:backgroundTint="#E91E63" />
        <Button
            android:id="@+id/screenshot"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="截图"
            app:backgroundTint="#E91E63" />
        <Button
            android:id="@+id/take_photo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:backgroundTint="#E91E63"
            android:text="拍照" />
        <Button
            android:id="@+id/choose_from_album"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:backgroundTint="#E91E63"
            android:text="选择照片" />
        <ImageView
            android:id="@+id/picture"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal" />
    </LinearLayout>
</ScrollView>

这里的功能主要有对手机的相册和摄像的使用——《Android摄像头相册使用+上传照片至服务器(上篇)》,截图还有分享功能。做过的功能请看原来写的文章,这里主要讲新的截图和分享功能。

4、Avatarupload.java

截图功能

  1. 只截取当前屏幕
  2. 长截屏,比如用到了ScrollView

一张屏幕

                //第一种情况:这里是一张屏幕,并不是长截图
                View view = getWindow().getDecorView();     // 获取DecorView
//                // 方式一:
                view.setDrawingCacheEnabled(true);
                view.buildDrawingCache();
                sharebitmap = view.getDrawingCache();
                // 方式二:
                Bitmap bitmap2 = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
                Canvas canvas = new Canvas();
                canvas.setBitmap(bitmap2);
                view.draw(canvas);

长截屏

    //这里是一张屏幕,是长截图
    /**
     * 截取scrollview的屏幕
     * **/
    public static Bitmap getScrollViewBitmap(ScrollView scrollView) {
        int h = 0;
        Bitmap bitmap;
        for (int i = 0; i < scrollView.getChildCount(); i++) {
            h += scrollView.getChildAt(i).getHeight();
        }
        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        scrollView.draw(canvas);
        return bitmap;
    }

全部代码

public class Avatarupload extends AppCompatActivity {
  public static final int TAKE_PHOTO = 1;

    public static final int CHOOSE_PHOTO = 2;

    private ImageView picture;

    private Button takePhoto;

    private Button chooseFromAlbum;

    private Uri imageUri;

    private String imagePath = null;

    private String root;

    private String image_test;

    private static final int SUCCESS = 1;

    private static final int FALL = 2;

    private Button login;
    private Button share;
    private Button logout;
    private Button screenshot;
    String thirdLoginId;
    String name;
    String image;
    String sex;
    private TextView username;
    private ImageView avatar;
    private TextView gender;
    private Platform qq;
    private Bitmap sharebitmap;
    private ScrollView scrollView;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_avatarupload);
        //第一步在oncreate方法中进行初始化
        Tencent mTencent = Tencent.createInstance("id换成自己的", this.getApplicationContext());


share=findViewById(R.id.share);
        share.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

//使用腾讯的分享界面,mob分享不了

                Bundle params1 = new Bundle();
//纯图片分享只可以是本地图片
//分享的类型  SHARE_TO_QQ_TYPE_IMAGE(纯图片分享)
                params1.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
//这里我是为了方便从本地直接拿到一个图片地址放到这里的,大家可以根据自己的需求来拿去本地图片的地址
                params1.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, image_test);
//分享之后弹框左边按钮的内容(这里基本上都写上自己应用的名字)
                params1.putString(QQShare.SHARE_TO_QQ_APP_NAME, "AndroidProject");
                params1.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE);
                mTencent.shareToQQ(Avatarupload.this, params1, new IUiListener() {
                    @Override
                    public void onComplete(Object o) {
                        Log.d("onComplete测试", o.toString());
                        //分享成功之后,需要将原照片删除
                    }

                    @Override
                    public void onError(UiError uiError) {
                        Log.d("onComplete测试", uiError.toString());

                    }

                    @Override
                    public void onCancel() {
                        Log.d("onComplete测试","取消了");

                    }

                    @Override
                    public void onWarning(int i) {
                        Log.d("onComplete测试","警告");

                    }
                });

            }
        });
         screenshot = findViewById(R.id.screenshot);
        screenshot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //第一种情况:这里是一张屏幕,并不是长截图
//                View view = getWindow().getDecorView();     // 获取DecorView
                // 方式一:
//                view.setDrawingCacheEnabled(true);
//                view.buildDrawingCache();
//                sharebitmap = view.getDrawingCache();
                // 方式二:
//                Bitmap bitmap2 = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
//                Canvas canvas = new Canvas();
//                canvas.setBitmap(bitmap2);
//                view.draw(canvas);


                //第二种情况:这里是一张屏幕,是长截图getViewGroupBitmap
                sharebitmap = getScrollViewBitmap(scrollView);



                //sharepicture = MediaStore.Images.Media.insertImage(getContentResolver(), sharebitmap, "share", "sharepicture");
                //System.out.println("whq保存到相册:"+sharepicture);
                root = Avatarupload.this.getExternalFilesDir("pic").getAbsolutePath();
                image_test = root+"/share.png";
                System.out.println("whq保存到相册:"+root);
                File file = new File(image_test);
                try {
                    file.createNewFile();
                    FileOutputStream fos = new FileOutputStream(file);
                    sharebitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
//                System.out.println("whq保存到相册sharebitmap:"+root);
                System.out.println("whq保存到相册sharebitmap:"+image_test);

                picture.setImageBitmap(sharebitmap);
            }
        });
    }
    //这里是一张屏幕,是长截图
    /**
     * 截取scrollview的屏幕
     * **/
    public static Bitmap getScrollViewBitmap(ScrollView scrollView) {
        int h = 0;
        Bitmap bitmap;
        for (int i = 0; i < scrollView.getChildCount(); i++) {
            h += scrollView.getChildAt(i).getHeight();
        }
        // 创建对应大小的bitmap
        bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
                Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bitmap);
        scrollView.draw(canvas);
        return bitmap;
    }
}

以上是关于QQ分享功能实现-Android的主要内容,如果未能解决你的问题,请参考以下文章

Android 第三方QQ分享功能实现

QQ分享功能实现-Android

Android项目实战(十七):QQ空间实现—— 分享功能 / 弹出PopupWindow

Android 使用第三方SDK—友盟实现分享功能

android网页分享到朋友圈问题求助?

android抢红包代码解析支持微信与QQ