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

本文介绍了如何在Android中实现QQ官方第三方接入的分享功能,包括创建工程、配置AndroidManifest,以及分享纯图片和截取View为Bitmap的步骤。重点在于AndroidManifest的配置和图片的保存与分享操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常见功能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() {
			@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.<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);
			}

			@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;
	}








评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值