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

来源:互联网 发布:网狐6603数据库文档 编辑:程序博客网 时间:2024/04/30 04:19

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

一、创建并配置工程

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

简单抄过来一些:

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


2. 配置AndroidManifest

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

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.qqsharedm"    android:versionCode="1"    android:versionName="1.0" >    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="21" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name" >        <activity            android:name="com.tencent.tauth.AuthActivity"            android:launchMode="singleTask"            android:noHistory="true" >            <intent-filter>                <action android:name="android.intent.action.VIEW" />                <category android:name="android.intent.category.DEFAULT" />                <category android:name="android.intent.category.BROWSABLE" />                <data android:scheme="tencent222222" />            </intent-filter>        </activity>        <activity            android:name="com.tencent.connect.common.AssistActivity"            android:configChanges="orientation|keyboardHidden|screenSize"            android:theme="@android:style/Theme.Translucent.NoTitleBar" />        <activity            android:name=".MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

二、正文配置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() {@Overridepublic 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.<strong>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);}@Overridepublic void onError(UiError e) {}@Overridepublic void onCancel() {}});}
两端代码均为回调,其实自定义与否看需求。
private class BaseUiListener implements IUiListener {@Overridepublic void onCancel() {// TODO Auto-generated method stub}@Overridepublic void onComplete(Object arg0) {// TODO Auto-generated method stub}@Overridepublic 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;}








0 0
原创粉丝点击