【移动应用开发技术】Android应用中怎么接入微信分享功能_第1页
【移动应用开发技术】Android应用中怎么接入微信分享功能_第2页
【移动应用开发技术】Android应用中怎么接入微信分享功能_第3页
【移动应用开发技术】Android应用中怎么接入微信分享功能_第4页
【移动应用开发技术】Android应用中怎么接入微信分享功能_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】Android应用中怎么接入微信分享功能

今天就跟大家聊聊有关Android应用中怎么接入微信分享功能,可能很多人都不太了解,为了让大家更加了解,在下给大家总结了以下内容,希望大家根据这篇文章可以有所收获。注册应用信息并下载必要工具在微信开放平台注册应用信息下载签名生成工具获取待接入应用的签名应用信息填入签名注意:由于一般调试签名和正式签名不一致,测试时可填入测试包的签名,上线时需要改为正式包的签名接入在build.gradle中,添加如下依赖:dependencies

{

compile

'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

}或:dependencies

{

compile

'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

}其中,前者包含统计功能AndroidManifest.xml中添加权限和微信回调Activity<uses-permission

android:name="android.permission.INTERNET"

/>

<uses-permission

android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

<uses-permission

android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<!--

for

mta

statistics

-->

<uses-permission

android:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permission

android:name="android.permission.READ_PHONE_STATE"/>

<uses-permission

android:name="android.permission.ACCESS_NETWORK_STATE"/>

<activity

android:name=".WXEntryActivity"

android:exported="true"

android:screenOrientation="portrait"

android:theme="@style/AppTheme.Fullscreen.Translucent"/>这里使用了一个透明的Activity来处理微信分享结果回调主题:<style

name="AppTheme.Fullscreen"

parent="Theme.AppCompat.NoActionBar">

<item

name="android:windowNoTitle">true</item>

<item

name="android:windowFullscreen">true</item>

<item

name="android:windowTranslucentNavigation"

tools:targetApi="kitkat">true</item>

</style>

<style

name="AppTheme.Fullscreen.Translucent">

<item

name="android:windowBackground">@android:color/transparent</item>

<item

name="android:windowIsTranslucent">true</item>

<item

name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>

</style>Activity当微信分享成功,点击返回App时,微信会主动调用WXEntryActivity,并将结果通过Intent传给WXEntryActivity,此时调用api.handleIntent(getIntent(),this)对结果进行处理,handleIntent第二个参数为IWXAPIEventHandler,分享结果会在onResp方法中处理,在这里我们发送一个广播,并在WXShare对象中对该广播进行监听public

class

WXEntryActivity

extends

BaseActivity

implements

IWXAPIEventHandler

{

private

IWXAPI

api;

@Override

protected

void

onCreate(Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

Logger.i("WXEntryActivity");

WXShare

share

=

new

WXShare(this);

api

=

share

//

.register()

.getApi();

//注意:

//第三方开发者如果使用透明界面来实现WXEntryActivity,需要判断handleIntent的返回值,如果返回值为false,则说明入参不合法未被SDK处理,应finish当前透明界面,避免外部通过传递非法参数的Intent导致停留在透明界面,引起用户的疑惑

try

{

if

(!api.handleIntent(getIntent(),

this))

{

finish();

}

}

catch

(Exception

e)

{

e.printStackTrace();

}

}

@Override

protected

void

onNewIntent(Intent

intent)

{

super.onNewIntent(intent);

Logger.i("onNewIntent");

setIntent(intent);

if

(!api.handleIntent(intent,

this))

{

finish();

}

}

@Override

public

void

onReq(BaseReq

baseReq)

{

}

@Override

public

void

onResp(BaseResp

baseResp)

{

Intent

intent

=

new

Intent(WXShare.ACTION_SHARE_RESPONSE);

intent.putExtra(WXShare.EXTRA_RESULT,

new

WXShare.Response(baseResp));

sendBroadcast(intent);

finish();

}

}工具类public

class

WXShare

{

public

static

final

String

APP_ID

=

"wx0123456789";

public

static

final

String

ACTION_SHARE_RESPONSE

=

"action_wx_share_response";

public

static

final

String

EXTRA_RESULT

=

"result";

private

final

Context

context;

private

final

IWXAPI

api;

private

OnResponseListener

listener;

private

ResponseReceiver

receiver;

public

WXShare(Context

context)

{

api

=

WXAPIFactory.createWXAPI(context,

APP_ID);

this.context

=

context;

}

public

WXShare

register()

{

//

微信分享

api.registerApp(APP_ID);

receiver

=

new

ResponseReceiver();

IntentFilter

filter

=

new

IntentFilter(ACTION_SHARE_RESPONSE);

context.registerReceiver(receiver,

filter);

return

this;

}

public

void

unregister()

{

try

{

api.unregisterApp();

context.unregisterReceiver(receiver);

}

catch

(Exception

e)

{

e.printStackTrace();

}

}

public

WXShare

share(String

text)

{

WXTextObject

textObj

=

new

WXTextObject();

textObj.text

=

text;

WXMediaMessage

msg

=

new

WXMediaMessage();

msg.mediaObject

=

textObj;

//

msg.title

=

"Will

be

ignored";

msg.description

=

text;

SendMessageToWX.Req

req

=

new

SendMessageToWX.Req();

req.transaction

=

buildTransaction("text");

req.message

=

msg;

req.scene

=

SendMessageToWX.Req.WXSceneSession;

boolean

result

=

api.sendReq(req);

Logger.i("text

shared:

"

+

result);

return

this;

}

public

IWXAPI

getApi()

{

return

api;

}

public

void

setListener(OnResponseListener

listener)

{

this.listener

=

listener;

}

private

String

buildTransaction(final

String

type)

{

return

(type

==

null)

?

String.valueOf(System.currentTimeMillis())

:

type

+

System.currentTimeMillis();

}

private

class

ResponseReceiver

extends

BroadcastReceiver

{

@Override

public

void

onReceive(Context

context,

Intent

intent)

{

Response

response

=

intent.getParcelableExtra(EXTRA_RESULT);

Logger.d("type:

"

+

response.getType());

Logger.d("errCode:

"

+

response.errCode);

String

result;

if

(listener

!=

null)

{

if

(response.errCode

==

BaseResp.ErrCode.ERR_OK)

{

listener.onSuccess();

}

else

if

(response.errCode

==

BaseResp.ErrCode.ERR_USER_CANCEL)

{

listener.onCancel();

}

else

{

switch

(response.errCode)

{

case

BaseResp.ErrCode.ERR_AUTH_DENIED:

result

=

"发送被拒绝";

break;

case

BaseResp.ErrCode.ERR_UNSUPPORT:

result

=

"不支持错误";

break;

default:

result

=

"发送返回";

break;

}

listener.onFail(result);

}

}

}

}

public

static

class

Response

extends

BaseResp

implements

Parcelable

{

public

int

errCode;

public

String

errStr;

public

String

transaction;

public

String

openId;

private

int

type;

private

boolean

checkResult;

public

Response(BaseResp

baseResp)

{

errCode

=

baseResp.errCode;

errStr

=

baseResp.errStr;

transaction

=

baseResp.transaction;

openId

=

baseResp.openId;

type

=

baseResp.getType();

checkResult

=

baseResp.checkArgs();

}

@Override

public

int

getType()

{

return

type;

}

@Override

public

boolean

checkArgs()

{

return

checkResult;

}

@Override

public

int

describeContents()

{

return

0;

}

@Override

public

void

writeToParcel(Parcel

dest,

int

flags)

{

dest.writeInt(this.errCode);

dest.writeString(this.errStr);

dest.writeString(this.transaction);

dest.writeString(this.openId);

dest.writeInt(this.type);

dest.writeByte(this.checkResult

?

(byte)

1

:

(byte)

0);

}

protected

Response(Parcel

in)

{

this.errCode

=

in.readInt();

this.errStr

=

in.readString();

this.transaction

=

in.readString();

this.openId

=

in.readString();

this.type

=

in.readInt();

this.checkResult

=

in.readByte()

!=

0;

}

public

static

final

Creator<Response>

CREATOR

=

new

Creator<Response>()

{

@Override

public

Response

createFromParcel(Parcel

source)

{

return

new

Response(source);

}

@Override

public

Response[]

newArray(int

size)

{

return

new

Response[size];

}

};

}

}接口public

interface

OnResponseListener

{

void

onSuccess();

void

onCancel();

void

onFail(String

message);

}使用在需要使用微信分享的Activity中:@Override

protected

void

onCreate(Bundle

savedInstanceState)

{

wxShare

=

new

WXShare(this);

wxShare.setListener(new

OnResponseListener()

{

@Override

public

void

onSuccess()

{

//

分享成功

}

@Ove

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论