友盟第三方工具類
阿新 • • 發佈:2018-12-10
第一步:
將事先準備好的檔案lib 於 res檔案 直接複製進專案。
匯入依賴
compile 'com.umeng.sdk:common:latest.integration'
compile 'com.umeng.sdk:analytics:latest.integration'
第二步:
複製如下的程式碼到AndroidManifest中
<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.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<activity android:name="com.umeng.qq.tencent.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="tencent1106724747" /> </intent-filter> </activity> <activity android:name="com.umeng.qq.tencent.AssistActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="orientation|keyboardHidden|screenSize"/> <meta-data android:name="UMENG_APPKEY" android:value="5ab080268f4a9d0273000124"> </meta-data>
第三步:
建立一個類App
import android.Manifest; import android.app.Activity; import android.app.Application; import android.content.Context; import android.os.Build; import android.support.v4.app.ActivityCompat; import com.umeng.commonsdk.UMConfigure; import com.umeng.socialize.Config; import com.umeng.socialize.PlatformConfig; public class App extends Application{ public static Context context; @Override public void onCreate() { super.onCreate(); //允許Debug模式 Config.DEBUG = true; PlatformConfig.setWeixin("wx967daebe835fbeac","5bb696d9ccd75a38c8a0bfe0675559b3"); PlatformConfig.setQQZone("1106724747", "X4TDJGW9WLrokgVn"); PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com"); UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, null); UMConfigure.setLogEnabled(true); } }
if(Build.VERSION.SDK_INT>=23){
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((Activity) getApplicationContext(),mPermissionList,123);
}
第三方登陸必須重寫方法在登陸QQ邏輯的頁面
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
第四步:
建立一個ShapeUtils類 把以下的程式碼直接複製進去即可。
使用方法; 建立物件 傳入上下文
分享方法: setWeb()方法過載 可傳入一個引數url 或者傳入全部四個引數
第三方登陸方法:loginQQ()傳入介面GetLogin獲取到響應結果並執行對應的邏輯操作。
第三方登陸:loginXinLang()傳入介面GetLogin獲取到響應結果並執行對應的邏輯操作。
獲取QQ資訊:getMessage()傳入介面GetData獲取到QQ資訊對應的實體類Bean。然後執行邏輯操作
。。。。。。 等等方法
注意: 如果複製出現紅線 說明lib檔案的包沒有新增到專案中 同步以下即可
import android.app.Activity;
import android.content.Context;
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 com.umeng.socialize.media.UMWeb;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
public class ShapeUtils {
public static Context context;
public ShapeUtils(Context context) {
this.context = context;
}
//QQ第三方登陸獲取資訊
public void loginQQ(GetData getData) {
this.getData = getData;
UMShareAPI.get(context).doOauthVerify((Activity) context, SHARE_MEDIA.QQ, authListener);
}
//新浪第三方登陸
public void loginXinLang() {
UMShareAPI.get(context).doOauthVerify((Activity) context, SHARE_MEDIA.SINA, authListener);
}
/**
* 用於傳值的實體類
*/
class Bean {
private String name;
private String icon;
private String sex;
private String address;
private String time;
@Override
public String toString() {
return "Bean{" +
"name='" + name + '\'' +
", icon='" + icon + '\'' +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
", time='" + time + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public Bean() {
}
public Bean(String name, String icon, String sex, String address, String time) {
this.name = name;
this.icon = icon;
this.sex = sex;
this.address = address;
this.time = time;
}
}
/**
* 監聽介面
*/
UMAuthListener authListener = new UMAuthListener() {
/**
* @desc 授權開始的回撥
* @param platform 平臺名稱
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @desc 授權成功的回撥
* @param platform 平臺名稱
* @param action 行為序號,開發者用不上
* @param data 使用者資料返回
*/
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
Toast.makeText(context, "登陸成功", Toast.LENGTH_LONG).show();
UMShareAPI.get(context).getPlatformInfo((Activity) context, SHARE_MEDIA.QQ, authListenerData);
}
/**
* @desc 授權失敗的回撥
* @param platform 平臺名稱
* @param action 行為序號,開發者用不上
* @param t 錯誤原因
*/
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(context, "登陸失敗:" + t.getMessage(), Toast.LENGTH_LONG).show();
}
/**
* @desc 授權取消的回撥
* @param platform 平臺名稱
* @param action 行為序號,開發者用不上
*/
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(context, "取消登陸", Toast.LENGTH_LONG).show();
}
};
/**
* 傳值監聽介面
*/
UMAuthListener authListenerData = new UMAuthListener() {
/**
* @desc 授權開始的回撥
* @param platform 平臺名稱
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @desc 授權成功的回撥
* @param platform 平臺名稱
* @param action 行為序號,開發者用不上
* @param data 使用者資料返回
*/
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
String name = data.get("name");
String icon = data.get("iconurl");
String sex = data.get("gender");
String address = data.get("city") + data.get("province");
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis()));
Bean bean = new Bean(name, icon, sex, address, time);
getData.setData(bean);
}
/**
* @desc 授權失敗的回撥
* @param platform 平臺名稱
* @param action 行為序號,開發者用不上
* @param t 錯誤原因
*/
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
}
/**
* @desc 授權取消的回撥
* @param platform 平臺名稱
* @param action 行為序號,開發者用不上
*/
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
}
};
public interface GetData {
void setData(Bean bean);
}
private GetData getData;
//分享圖片 url
public void setBitmap(String url) {
new ShareAction((Activity) context)
.setDisplayList(SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN)
.setCallback(new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
}
@Override
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(context, "分享失敗" + t.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
}
})
.withMedia(new UMImage(context, url))
.open();
}
//分享圖片 id
public void setBitmap(int id) {
new ShareAction((Activity) context)
.setDisplayList(SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN)
.setCallback(new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
}
@Override
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(context, "分享失敗" + t.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
}
})
.withMedia(new UMImage(context, id))
.open();
}
//分享文字
public void setText(String title) {
new ShareAction((Activity) context)
.setDisplayList(SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN)
.setCallback(new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
}
@Override
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(context, "分享失敗" + t.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
}
})
.withText(title)
.open();
}
//分享超連結
public void setWeb(String url) {
UMWeb web = new UMWeb(url);
web.setThumb(new UMImage(context, R.mipmap.ic_launcher));
web.setTitle("新聞");
web.setDescription("這是一條新聞");
new ShareAction((Activity) context)
.setDisplayList(SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN)
.setCallback(new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
}
@Override
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(context, "分享失敗" + t.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
}
})
.withMedia(web)
.open();
}
//分享超連結
public void setWeb(String url, String title, String message, String image) {
UMWeb web = new UMWeb(url);
if (image == null) {
web.setThumb(new UMImage(context, R.mipmap.ic_launcher));
} else {
web.setThumb(new UMImage(context, image));
}
if (title == null) {
web.setTitle("新聞");
} else {
web.setTitle(title);
}
if (message == null) {
web.setDescription("這是一條新聞");
} else {
web.setDescription(message);
}
new ShareAction((Activity) context)
.setDisplayList(SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN)
.setCallback(new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
}
@Override
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(context, "分享失敗" + t.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(context, "分享取消", Toast.LENGTH_LONG).show();
}
})
.withMedia(web)
.open();
}
}
分享到微信還需要一個類
在包名目錄下建立wxapi資料夾,新建一個名為WXEntryActivity
的activity繼承WXCallbackActivity。