1.布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@mipmap/ic_launcher"/>
<Button
android:id="@+id/qq_dl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="qq登录"
android:layout_gravity="center"
android:layout_marginTop="200dp"/>
<Button
android:id="@+id/qq_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="分享"
android:layout_gravity="center"
/>
</LinearLayout>
2.主页面 继承 Onclick
package com.bw.ymy.qqdenglu;
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.support.annotation.NonNull;
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 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_dl,qq_share;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取资源id
qq_dl=findViewById(R.id.qq_dl);
qq_share=findViewById(R.id.qq_share);
qq_dl.setOnClickListener(this);
qq_share.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, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, 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.QQ)
.setCallback(shareListener)
//打开分享面板
.open();
break;
case R.id.qq_dl:
UMShareAPI umShareAPI=UMShareAPI.get(MainActivity.this);
//开始登录
//第一个参数:上下文
//第二个参数,登录哪种平台
//第三个参数,添加回调
umShareAPI.getPlatformInfo(MainActivity.this, SHARE_MEDIA.QQ, new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {
//跳转
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
@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("scrren_name");
String img=map.get("profile_image_url");
Log.i("dj", "name is "+ name);
Log.i("dj", "img is "+ img);
}
//登录失败
@Override
public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
Log.i("dj", "UMAuthListener onError" + throwable.getLocalizedMessage());
}
//登录取消
@Override
public void onCancel(SHARE_MEDIA share_media, int i) {
Log.i("dj", "UMAuthListener onCancel");
}
});
break;
default:
break;
}
}
private UMShareListener shareListener=new UMShareListener() {
@Override
//分享开始的回调
public void onStart(SHARE_MEDIA share_media) {
}
//分享成功的回调
@Override
public void onResult(SHARE_MEDIA share_media) {
}
/**
* @descrption 分享失败的回调
*
*/
@Override
public void onError(SHARE_MEDIA share_media, Throwable throwable) {
}
//取消的回调
@Override
public void onCancel(SHARE_MEDIA share_media) {
}
};
//这一步不写,获取不到头像以及昵称
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
}
3.APPLication
package com.bw.ymy.qqdenglu;
import android.app.Application;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;
public class MyApplication extends Application {
/**
* 第一步:导入jar包和res文件,将jar包add as lib..
* 第二步:自定义Application 在onCreate中完成以下两行代码(所有参数没有自己注册过不要改)
* 第三步:在Manifests中添加配置,详见Manifests注释(不要随意修改)
* 第四步:在需要调用的地方写调用,详见MainActivity中
*/
@Override
public void onCreate() {
super.onCreate();
//UMConfigure 报红 在 build 写上3个SDK
UMConfigure.init(this,"5a12384aa40fa3551f0001d1","umeng",UMConfigure.DEVICE_TYPE_PHONE,"");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
}
}
4.清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bw.ymy.qqdenglu"
android:versionCode="1"
android:versionName="1.0">
<!-- 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" />
<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:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- 3.写以下配置 -->
<meta-data
android:name="UMENG_APPKEY"
android:value="5c07d385f1f556e5f90003c4"></meta-data>
<activity android:name=".Main2Activity"></activity>
</application>
</manifest>
5.biulad.grase
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.bw.ymy.qqdenglu"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//导入的 必写
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//noinspection GradleCompatible
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//3个SDK
implementation 'com.umeng.sdk:common:latest.integration'
implementation 'com.umeng.sdk:analytics:latest.integration'
implementation files('libs/umeng-share-core-6.9.4.jar')
}
}
dependencies {
implementation 'com.android.support.constraint:constraint-layout:+'
}
6.libs导入
7 .build.grade 详见图5