微信分享的完善,以及剪贴板的应用


之前做的微信分享活动,链接和内容是写死在客户端的,现在要改成能够从后台获取动态数据的版本。
活动页面如下:

点击立即邀请按钮,跳转到客户端的登录界面。


1.剪贴板的使用

点击复制按钮,讲文本框中的链接复制到系统的剪贴板中。
方法很简单,在此贴出:
webview声明接口:
web.addJavascriptInterface(new JavaScriptToMobileInterface(),"JavaScriptToMobileInterface");

JavaScriptToMobileInterface接口的实现:
	final class JavaScriptToMobileInterface {
		JavaScriptToMobileInterface() {
		}
		@JavascriptInterface
		public String getUserId() {
			Log.d("powinandroid", "getUserId() method is invoked");
			return Constant.userId;
		}		
		@JavascriptInterface
		public String getType(){
			Log.d("powinandroid", "getType() method is invoked");
			return Constant.INTERACTIVE_APPTYPE;
		}		
		@JavascriptInterface
		public void copy(String string){
			Log.d("powinandroid", "copy() method is invoked");
			ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
			ClipData clip = ClipData.newPlainText("shareURL",string);
			clipboard.setPrimaryClip(clip);
			tip("复制链接成功!");
		}
	}


然后再前端页面中,编写js方法判断有没有返回userId(即有没有登录)。若是没有登录(即userId为空),则执行confirm方法,跳转到登录界面:
		@Override
		public boolean onJsConfirm(WebView view, String url, String message,
				final JsResult result) {
			Intent loginIntent = new Intent(mContext, LoginActivity.class);
			mContext.startActivity(loginIntent);
			result.cancel();
			return true;
		}


登录之后会直接显示链接和复制按钮,复制的方法在上面的代码中能看到。
看下官方指南:http://developer.android.com/intl/zh-cn/guide/topics/text/copy-paste.html
中文版:http://www.cnblogs.com/mengdd/p/3572316.html
注意两点:
1.导包的时候
API 11之前: android.text.ClipboardManager
API 11之后: android.content.ClipboardManager
2.剪贴板每次仅会持有一个clip对象,当应用放另一个clip对象进来时,前一个就消失了。


其实这里我们用到的功能很简单,甚至一行代码就够用了:
clipboard.setText("String");
就可以了,但是setText这个方法已经不被官方推荐使用了,所以还是老老实实的用ClipData吧。


2.微信分享的完善

现在我们从接口获得微信分享的缩略图,链接,标题和描述,然后将这四个属性放在静态全局变量中,在点击下图按钮时,进行分享。


		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch(v.getId()){
			case R.id.sharetowx:
				wxshare.SharedToWX(Constant.WXSHARE_TITLE, Constant.WXSHARE_DESCRIPTION, false, Constant.WXSHARE_WEBURL,Constant.WXSHARE_PICURL);
				sharebody.dismiss();
				break;
				
			case R.id.sharetowz:
				wxshare.SharedToWX(Constant.WXSHARE_TITLE, Constant.WXSHARE_DESCRIPTION, true, Constant.WXSHARE_WEBURL,Constant.WXSHARE_PICURL);
				sharebody.dismiss();
				break;
				
			case R.id.sharecancel:
				sharebody.dismiss();
				break;
				
			default:
				break;
			}
		}


在官方给出的demo中,是没有图片url参数的,官方demo用的是本地图片,那么我们就进行改造,添加一个参数,放入图片url。
那么SharedToWX()这个方法也要进行相应的修改,在取得网络图片之后再进行分享。
由于在主线程中不能发起网络请求,所以我们要new一个。
	/**
	 * 分享到微信好友/朋友圈
	 */
	public void SharedToWX(String title, String description, Boolean isShareZone, String weburl,String picUrl){
			webpage = new WXWebpageObject();
			webpage.webpageUrl = weburl;
			msg = new WXMediaMessage(webpage);
			msg.title = title;
			msg.description = description;
			this.isShareZone=isShareZone;
			this.picUrl=picUrl;
			getHttpBitmap();
		}
    public void getHttpBitmap() {
    	new Thread(){
			@Override
			public void run() {
		            try {
	                    // 获得连接
	                    HttpURLConnection conn = (HttpURLConnection) new URL(picUrl)
	                                    .openConnection();
	                    // 设置超时时间为6000毫秒,conn.setConnectionTiem(0);表示没有时间限制
	                    conn.setConnectTimeout(6000);
	                    // 连接设置获得数据流
	                    conn.setDoInput(true);
	                    // 不使用缓存
	                    conn.setUseCaches(false);
	                    // 这句可有可无,没有影响
	                     conn.connect();
	                    // 得到数据流
	                    InputStream is = conn.getInputStream();
	                    // 解析得到图片
	                    thumb = BitmapFactory.decodeStream(is);
	                    // 关闭数据流
	                    is.close();
	                    handler.sendEmptyMessage(HandlerCASE.MSG_DONE);
	            } catch (Exception e) {
	                    e.printStackTrace();
	            }
			}
    	}.start();
    }


	Handler handler=new Handler(){
		@Override
		public void handleMessage(Message message) {
			// TODO Auto-generated method stub
			super.handleMessage(message);
			switch (message.what) {
			case HandlerCASE.MSG_DONE:
				if (null==thumb) {
					thumb = BitmapFactory.decodeResource(mcontext.getResources(), R.drawable.icon_share);
				}
				msg.thumbData = bmpToByteArray(thumb, true);
				Log.d("getHttpBitmap", "msg.thumbData:"+msg.thumbData.length);
				SendMessageToWX.Req req = new SendMessageToWX.Req();
				req.transaction = buildTransaction("webpage");
				req.message = msg;
				req.scene = isShareZone ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
				mapi.sendReq(req);
				break;


			default:
				break;
			}
		}
		
	};

显然能看到,步骤就是:获得数据流,转成Bitmap,bitmap再转成ByteArray,放到msg.thumbData中。如果没取到的话,那就还是用本地的图片。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值