100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 使用微信api将内容分享给好友 或者发送到朋友圈

使用微信api将内容分享给好友 或者发送到朋友圈

时间:2023-09-15 05:51:51

相关推荐

使用微信api将内容分享给好友 或者发送到朋友圈

/u012591761/article/details/42263009

现在我们给应用添加一个功能,能在应用内将消息分享给微信好友,或者分享到朋友圈中。

我们首先来到微信开放平台官网,跟着组织走,官网指南:

https://open./cgi-bin/frame?t=resource/res_main_tmpl&verify=1&lang=zh_CN

点击这里,查看步骤

1.申请你的AppID
开发者账号注册完了之后,来到管理中心,创建我们第一个应用。

按照要求将应用信息补完就行,期间有一点要注意:

这次我们需要的应用签名不再是SHA1 fingerprint,而是MD5 fingerprint!!

而且我们要把签名中该死的冒号给去掉才行!

最后我们得到这样的签名:

填入正确后等待审核。

ps:其实签名和包名填错都没关系,应用审核通过后可以随时更改。

但是应用名称没办法修改了。

这些都完成,审核通过后我们会得到AppID。

于是我们也是有身份了人了。

那么这个应用名称会在那里显示呢?

请叫我土豪。

2.搭建开发环境
下载libammsdk.jar包添加到buildpath什么的就不再赘述了。

注意AndroidManifest.xml 添加必要的权限支持:

[java]view plain copy print ? <uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.INTERNET"/> <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"/>

3.在代码中使用
接下来我会直接使用自己的例子作为说明。

首先我做了一个这样的DEMO:使用高德地图sdk取得自己的定位,返回经纬度和详细地址描述:

我添加一个按钮,点击能讲现在的位置分享到微信。

现在这个按钮是空的,我们一步步来做。

[1] 注册到微信
要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。

可以在程序入口Activity的onCreate回调函数处,或其他合适的地方将你的应用id注册到微信。

[java]view plain copy print ? publicstaticfinalStringAPP_ID="wxeb************";//IWXAPI是第三方app和微信通信的openapi接口privateIWXAPIapi;api=WXAPIFactory.createWXAPI(this,APP_ID,true);api.registerApp(APP_ID);

public static final String APP_ID= "wxeb************";// IWXAPI 是第三方app和微信通信的openapi接口private IWXAPI api;api = WXAPIFactory.createWXAPI(this, APP_ID, true);api.registerApp(APP_ID);

这一段代码塞到onCreate()里面就行了。

[2] 发送请求到微信
然后我们点击分享按钮,然后跳转到分享页面。同时将我们要分享的文本带过去。

[java]view plain copy print ? Intentintent=newIntent(this,ShareActivity.class);Bundlebundle=newBundle();bundle.putString("text",mLocationDesTextView.getText().toString());intent.putExtras(bundle);startActivity(intent);

Intent intent=new Intent(this, ShareActivity.class);Bundle bundle=new Bundle();bundle.putString("text", mLocationDesTextView.getText().toString());intent.putExtras(bundle);startActivity(intent);

点击文字按钮,弹出对话框,可以在里面修改要分享的文字。

[java]view plain copy print ? findViewById(R.id.send_text).setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){finalEditTexteditor=newEditText(ShareActivity.this);editor.setLayoutParams(newLinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));editor.setText(bundle.getString("text"));newAlertDialog.Builder(ShareActivity.this).setTitle("sendtext").setView(editor).setPositiveButton("send",newDialogInterface.OnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialog,intwhich){Stringtext=editor.getText().toString();if(text==null||text.length()==0){return;}//初始化一个WXTextObject对象WXTextObjecttextObj=newWXTextObject();textObj.text=text;//用WXTextObject对象初始化一个WXMediaMessage对象WXMediaMessagemsg=newWXMediaMessage();msg.mediaObject=textObj;//发送文本类型的消息时,title字段不起作用//msg.title="Willbeignored";msg.description=text;//构造一个ReqSendMessageToWX.Reqreq=newSendMessageToWX.Req();req.transaction=buildTransaction("text");//transaction字段用于唯一标识一个请求req.message=msg;req.scene=isTimelineCb.isChecked()?SendMessageToWX.Req.WXSceneTimeline:SendMessageToWX.Req.WXSceneSession;//调用api接口发送数据到微信api.sendReq(req);finish();}}).setNegativeButton("cancel",null).create().show();}});privateStringbuildTransaction(finalStringtype){return(type==null)?String.valueOf(System.currentTimeMillis()):type+System.currentTimeMillis();}

findViewById(R.id.send_text).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {final EditText editor = new EditText(ShareActivity.this);editor.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));editor.setText(bundle.getString("text"));new AlertDialog.Builder(ShareActivity.this).setTitle("send text").setView(editor).setPositiveButton("send", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String text = editor.getText().toString();if (text == null || text.length() == 0) {return;}// 初始化一个WXTextObject对象WXTextObject textObj = new WXTextObject();textObj.text = text;// 用WXTextObject对象初始化一个WXMediaMessage对象WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = textObj;// 发送文本类型的消息时,title字段不起作用// msg.title = "Will be ignored";msg.description = text;// 构造一个ReqSendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = buildTransaction("text"); // transaction字段用于唯一标识一个请求req.message = msg;req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;// 调用api接口发送数据到微信api.sendReq(req);finish();}}).setNegativeButton("cancel", null).create().show();}});private String buildTransaction(final String type) {return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();}

点击send之后,执行api.sendReq(req),就将内容发送出去啦。

需要注意的是,SendMessageToWX.Req的scene成员,如果scene填WXSceneSession,那么消息会发送至微信的会话内。

如果scene填WXSceneTimeline(微信4.2以上支持,如果需要检查微信版本支持API的情况,可调用IWXAPI的getWXAppSupportAPI方法,0x21020001及以上支持发送朋友圈),那么消息会发送至朋友圈。

scene默认值为WXSceneSession。

[3] 接收微信的请求及返回值
如果你的程序需要接收微信发送的请求,或者接收发送到微信请求的响应结果,需要下面3步操作:

a. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity。

如图:

并在manifest文件里面加上exported属性,设置为true,例如:

[java]view plain copy print ? <activityandroid:name=".wxapi.WXEntryActivity"android:exported="true"></activity>

<activity android:name=".wxapi.WXEntryActivity"android:exported="true"></activity>

b. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法

c. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法,示例如下:

[java]view plain copy print ? publicclassWXEntryActivityextendsActivityimplementsIWXAPIEventHandler{IWXAPIapi=WXAPIFactory.createWXAPI(this,"wxeb2************");@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TODOAuto-generatedmethodstubsuper.onCreate(savedInstanceState);//setContentView(R.layout.send_to_wx);api.handleIntent(getIntent(),this);}@OverridepublicvoidonReq(BaseReqarg0){//TODOAuto-generatedmethodstub}@OverrideprotectedvoidonNewIntent(Intentintent){super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent,this);}@OverridepublicvoidonResp(BaseRespresp){//TODOAuto-generatedmethodstubintresult=0;switch(resp.errCode){caseBaseResp.ErrCode.ERR_OK:result=0;break;caseBaseResp.ErrCode.ERR_USER_CANCEL:result=-2;break;caseBaseResp.ErrCode.ERR_AUTH_DENIED:result=-4;break;default:result=123;break;}Toast.makeText(this,Integer.toString(result),Toast.LENGTH_LONG).show();finish();}}

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{IWXAPI api = WXAPIFactory.createWXAPI(this, "wxeb2************");@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//setContentView(R.layout.send_to_wx);api.handleIntent(getIntent(), this);}@Overridepublic void onReq(BaseReq arg0) {// TODO Auto-generated method stub}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);}@Overridepublic void onResp(BaseResp resp) {// TODO Auto-generated method stubint result = 0;switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK:result = 0;break;case BaseResp.ErrCode.ERR_USER_CANCEL:result = -2;break;case BaseResp.ErrCode.ERR_AUTH_DENIED:result = -4;break;default:result = 123;break;}Toast.makeText(this, Integer.toString(result), Toast.LENGTH_LONG).show();finish();}}

当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。