版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年人教版七年级英语下册第九单元课堂练习题及答案
- 高考物理大一轮复习 课后限时集训22 电容器、带电粒子在电场中的运动-人教版高三全册物理试题
- 高考生物一轮复习 第一编 考点通关 考点10 光合作用练习(含解析)-人教版高三全册生物试题
- 河南省2024届高三下学期4月模拟联合考试语文试题及答案解析
- 9.3 公正司法 课件-高中政治统编版必修三政治与法治
- 佰通卡-青岛移动合作预案
- 2024安全生产月“人人讲安全、个个会应急-畅通生命通道”主题培训
- 2024年人教版七年级英语下册第六单元第2课时Section A (2a-2d)课堂练习题及答案
- 湖南省长沙市开福区青竹湖湘一外国语学校2023-2024学年七年级下学期第一次月考数学试卷(含解析)
- 2024年信宜市《高等数学(一)》(专升本)模拟试题含解析
- 线束外观检验标准
- 浅谈铁路T梁后张法预应力筋理论伸长值与实际伸长值计算
- 县级局基层专卖监督管理所工作职责、标准、要求、流程
- 优秀酸洗磷化废水处理设计方案
- 《物体浮沉条件及应用》说课稿
- 三年级两位数乘两位数计算(200道)
- 信息论课程设计
- 幼儿园火灾应急疏散预案
- 保健食品选方、组方及配方依据
- 造价咨询公司组织机构及人员岗位职责
- 44'-bipy配位银的磷酸配合物的合成和性质研究
评论
0/150
提交评论