QQ分享官方第三方接入(分享纯图片及截取view的bitmap图)

常见功能Mark:QQ分享官方第三方接入。

一、创建并配置工程

参考腾讯官方文档: 点击打开链接

简单抄过来一些:

1、创建一个工程,并把open-sdk.jar文件和mta_sdk_x.x.x.jar文件拷贝到libs(或lib)目录下

QQ分享官方第三方接入(分享纯图片及截取view的bitmap图)_第1张图片

2. 配置AndroidManifest

在应用的AndroidManifest.xml增加配置的节点下增加以下配置(注:不配置将会导致无法调用API);(下面是我自己的manifest代码,直接粘贴,标红的地方为AppKey




    
    
    

    

    
        
            
                

                
                

                
            
        
        
        
            
                

                
            
        
    

二、正文配置QQ分享Demo:

一)实例化: private Tencent mTencent;

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initViews();
		// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
		// 其中APP_ID是分配给第三方应用的appid,类型为String。
		mTencent = Tencent.createInstance("222222",
				this.getApplicationContext());
		// 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取
		bt_1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Bitmap b;
				if (tv_1.getDrawingCache() != null) {
					b = tv_1.getDrawingCache();
				} else {
					b = loadBitmapFromView(tv_1);
				}
				saveBitmap(b);
				onClickShareToQQ();
				Toast.makeText(getApplicationContext(), "保存成功",
						Toast.LENGTH_SHORT).show();
			}
		});
	}
二、分享消息代码:(我做的是分享纯图片):这个比较恶心的一点是图片必须取路径,要么网络路径要么本地路径。让人比较无奈。(具体路径及保存图片代码见最后注释)

private void onClickShareToQQ() {
		Bundle shareParams = new Bundle();
		shareParams.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE,
				QQShare.SHARE_TO_QQ_TYPE_IMAGE);
		shareParams.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL,
				File.getPath() + picName);
		shareParams.putString(QQShare.SHARE_TO_QQ_APP_NAME, "LPS CRM");
		shareParams.putInt(QQShare.SHARE_TO_QQ_EXT_INT,
				QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE);
		doShareToQQ(shareParams);
	}
三、分享后实现回调

private void doShareToQQ(Bundle params) {
		mTencent.shareToQQ(MainActivity.this, params, new BaseUiListener() {
			protected void doComplete(JSONObject values) {
				Toast.makeText(getApplicationContext(), "成功",
						Toast.LENGTH_SHORT);
			}

			@Override
			public void onError(UiError e) {
			}

			@Override
			public void onCancel() {
			}
		});
	}
两端代码均为回调,其实自定义与否看需求。
private class BaseUiListener implements IUiListener {

		@Override
		public void onCancel() {
			// TODO Auto-generated method stub

		}

		@Override
		public void onComplete(Object arg0) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onError(UiError arg0) {
			// TODO Auto-generated method stub

		}

	}

注释:

核心代码:抓取view图片缓存保存bitmap判空代码:

public static Bitmap loadBitmapFromView(View v) {
		if (v == null) {
			return null;
		}
		v.setDrawingCacheEnabled(true);
		Bitmap screenshot;
		v.measure(MeasureSpec.makeMeasureSpec(v.getWidth(),
				MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(
				v.getHeight(), MeasureSpec.UNSPECIFIED));
		v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
		v.buildDrawingCache();
		screenshot = v.getDrawingCache();
		if (screenshot == null) {
			v.setDrawingCacheEnabled(true);
			screenshot = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
					Bitmap.Config.ARGB_8888);
			Canvas c = new Canvas(screenshot);
			c.translate(-v.getScrollX(), -v.getScrollY());
			v.draw(c);
			return screenshot;
		}
		return screenshot;
	}



1)保存图片到本地

/**
	 * 保存图片到本地
	 * */
	public void saveBitmap(Bitmap bm) {
		isHaveSDCard();
		if (isHaveSDCard()) {
			File = Environment.getExternalStorageDirectory();
		} else {
			File = Environment.getDataDirectory();
		}
		File = new File(File.getPath() + "/MotieReader/data/");
		if (!File.isDirectory()) {
			File.delete();
			File.mkdirs();
		}
		if (!File.exists()) {
			File.mkdirs();
		}
		writeBitmap(File.getPath(), picName, bm);

	}
2)保存图片到本地

/**
	 * 保存图片
	 * 
	 * @param path
	 * @param name
	 * @param bitmap
	 */
	public static void writeBitmap(String path, String name, Bitmap bitmap) {
		File file = new File(path);
		if (!file.exists()) {
			file.mkdirs();
		}

		File _file = new File(path + name);
		if (_file.exists()) {
			_file.delete();
		}
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(_file);
			if (name != null && !"".equals(name)) {
				int index = name.lastIndexOf(".");
				if (index != -1 && (index + 1) < name.length()) {
					String extension = name.substring(index + 1).toLowerCase();
					if ("png".equals(extension)) {
						bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
					} else if ("jpg".equals(extension)
							|| "jpeg".equals(extension)) {
						bitmap.compress(Bitmap.CompressFormat.JPEG, 75, fos);
					}
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
三、是否有sd卡

public boolean isHaveSDCard() {
		String SDState = android.os.Environment.getExternalStorageState();
		if (SDState.equals(android.os.Environment.MEDIA_MOUNTED)) {
			return true;
		}
		return false;
	}








你可能感兴趣的:(腾讯,qq,android分享,原生,android)