簡單實現第三方qq登入和分享

ren18234073466發表於2018-12-07

在這裡插入圖片描述
在這裡插入圖片描述
第一步:匯入jar包和res檔案,將jar包add as lib…

	第一步:匯入jar包到專案資料夾libs
	umeng-common-1.5.4.jar
	umeng-share-core-6.9.4.jar
	umeng-share-QQ-simplify-6.9.4.jar
	umeng-share-sina-simplify-6.9.4.jar
	umeng-share-wechat-simplify-6.9.4.jar
	umeng-shareboard-widget-6.9.4.jar
	umeng-sharetool-6.9.4.jar
	第二步:匯入佈局檔案到layout資料夾下
	socialize_share_menu_item.xml
	umeng_socialize_oauth_dialog.xml
	umeng_socialize_share.xml
	第三步:匯入下面檔案到values資料夾下
	umeng_socialize_shareview_strings.xml
	umeng_socialize_style.xml
	第四步:匯入需要的圖片到drawable資料夾下

第二步:自定義MyApplication 在onCreate中完成以下兩行程式碼(所有引數沒有自己註冊過不要改)

package com.umeng.soexample;

import android.app.Application;

import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;

/**
 * 第一步:匯入jar包和res檔案,將jar包add as lib..
 * 第二步:自定義Application 在onCreate中完成以下兩行程式碼(所有引數沒有自己註冊過不要改)
 * 第三步:在Manifests中新增配置,詳見Manifests註釋(不要隨意修改)
 * 第四步:在需要呼叫的地方寫呼叫,詳見MainActivity中
 */
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        UMConfigure.init(this,"5a12384aa40fa3551f0001d1","umeng",UMConfigure.DEVICE_TYPE_PHONE,"");
        //下面這一行程式碼根據需要設定自己的,當前表示qq
        PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
    }
}

第三步:在Manifests中新增配置,詳見Manifests註釋(不要隨意修改)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.umeng.soexample">
    <!-- 1.新增以下許可權 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.INTERNET" />

    <!-- 2.使用自定義Applicaiton -->
    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- 3.寫以下兩個activity -->
        <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="tencent100424468" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|screenSize"/>
        <!-- 3.寫以下配置 -->
        <meta-data android:name="UMENG_APPKEY"
            android:value="5c07d385f1f556e5f90003c4">
        </meta-data>
    </application>
</manifest>

第四步:在需要呼叫的地方寫呼叫,詳見MainActivity中

package com.umeng.soexample;

import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMAuthListener;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;

import java.util.Map;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button QQ_Share;
    private Button QQ_login;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    /**
     * 新增回撥
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
    }

    private void initView() {
        QQ_Share = findViewById(R.id.QQ_Share);
        QQ_login = findViewById(R.id.QQ_login);

        QQ_Share.setOnClickListener(this);
        QQ_login.setOnClickListener(this);

        checkPermission();
    }

    /**
     * 動態新增許可權,模擬器Android版本小於6.0的不用寫,再有問的打死
     */
    private void checkPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.CALL_PHONE,
                    Manifest.permission.READ_LOGS,
                    Manifest.permission.READ_PHONE_STATE,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.SET_DEBUG_APP,
                    Manifest.permission.SYSTEM_ALERT_WINDOW,
                    Manifest.permission.GET_ACCOUNTS,
                    Manifest.permission.WRITE_APN_SETTINGS};
            ActivityCompat.requestPermissions(this, mPermissionList, 123);
        }
    }

    /**
     * 動態新增許可權回撥,模擬器Android版本小於6.0的不用寫,再有問的打死
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.QQ_Share:
                //分享用的圖片
                UMImage image = new UMImage(MainActivity.this, R.drawable.umeng_socialize_qq);
                new ShareAction(MainActivity.this)
                        //分享的標題
                        .withText("hello")
                        //分享的圖片
                        .withMedia(image)
                        //分享到哪,這裡面只寫了QQ,如有需要在後面新增
                         //.setDisplayList(SHARE_MEDIA.QZONE,SHARE_MEDIA.QQ)
                        .setDisplayList(SHARE_MEDIA.QQ)
                        //設定回撥
                        .setCallback(shareListener)
                        //開啟分享皮膚
                        .open();
                break;
            case R.id.QQ_login:
                //獲得UMShareAPI例項
                UMShareAPI umShareAPI =  UMShareAPI.get(MainActivity.this);

                //開始登入
                //第一個引數:上下文
                //第二個引數,登入哪種平臺
                //第三個引數,新增回撥
                umShareAPI.getPlatformInfo(MainActivity.this, SHARE_MEDIA.QQ, new UMAuthListener() {
                    /**
                     * 開始登入回撥
                     * @param share_media
                     */
                    @Override
                    public void onStart(SHARE_MEDIA share_media) {
                        Log.i("dj", "UMAuthListener onStart");
                    }

                    /**
                     * 登入完成
                     * @param share_media
                     * @param i
                     * @param map
                     */
                    @Override
                    public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
                        //頭像,暱稱,如果拿不到,自己debug看Key是啥,再問打死
                        Log.i("dj", "UMAuthListener onComplete");

                        //獲取名字
                        String name  = map.get("screen_name");
                        //獲取頭像
                        String img  = map.get("profile_image_url");

                        Log.i("dj", "name is "+ name);
                        Log.i("dj", "img is "+ img);
                    }

                    /**
                     * 登入失敗
                     * @param share_media
                     * @param i
                     * @param throwable
                     */
                    @Override
                    public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
                        Log.i("dj", "UMAuthListener onError" + throwable.getLocalizedMessage());
                    }

                    /**
                     * 登入取消
                     * @param share_media
                     * @param i
                     */
                    @Override
                    public void onCancel(SHARE_MEDIA share_media, int i) {
                        Log.i("dj", "UMAuthListener onCancel");
                    }
                });
                break;
            default:
                break;
        }
    }

    private UMShareListener shareListener = new UMShareListener() {
        /**
         * @descrption 分享開始的回撥
         * @param platform 平臺型別
         */
        @Override
        public void onStart(SHARE_MEDIA platform) {
            Log.i("dj", "UMShareListener onStart");
        }

        /**
         * @descrption 分享成功的回撥
         * @param platform 平臺型別
         */
        @Override
        public void onResult(SHARE_MEDIA platform) {
            Log.i("dj", "UMShareListener onResult");
        }

        /**
         * @descrption 分享失敗的回撥
         * @param platform 平臺型別
         * @param t 錯誤原因
         */
        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            Log.i("dj", "UMShareListener onError");
        }

        /**
         * @descrption 分享取消的回撥
         * @param platform 平臺型別
         */
        @Override
        public void onCancel(SHARE_MEDIA platform) {
            Log.i("dj", "UMShareListener onCancel");
        }
    };
}

相關文章