分享google+facebook+twitter(Eclipse)

最近做游戏分享功能,遇到了这3大平台的分享,网上的介绍好多,但也不全,没有做到很详细的分享图片,文字,链接的介绍,所以我结合了一下,自己封装了3大平台的分享。

一,google+分享

不需要申请,直接代码。

1 图片和链接分享

​​public class GoogleShare {
	private static GoogleShare mInstance;

	public static GoogleShare getInstance() {
		if (mInstance == null) {
			mInstance = new GoogleShare();
		}
		return mInstance;
	}

	public void share(Activity mContext, String imagePath, String link, String title) {
		try {
			// 判断是否安装Google Service
			if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(mContext) == ConnectionResult.SUCCESS) {
				//本地图片
				if (!imagePath.equals("")) {
					File file = new File(imagePath);
					Uri imageUri = URIUtil.getImageContentUri(mContext, file);
					Log.d("GoogleShare", imageUri.getPath());
					Intent shareIntent = new PlusShare.Builder(mContext).setType("image/*").setText(title)
							.setStream(imageUri).getIntent();
					mContext.startActivityForResult(shareIntent, Constant.RC_GOOGLE_SHARE);
				}
				//链接
				if (!link.equals("")) {
					Intent shareIntent = new PlusShare.Builder(mContext).setType("text/*").setText(title)
							.setContentUrl(Uri.parse(link)).getIntent();
					mContext.startActivityForResult(shareIntent, Constant.RC_GOOGLE_SHARE);
				}
			} else {
				Toast.makeText(mContext, "Please install Google Service", 0).show();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == Constant.RC_GOOGLE_SHARE) {
			if (resultCode == Activity.RESULT_OK) {
				//success
			} else if (resultCode == Activity.RESULT_CANCELED) {
				//cancel
			} else {
				//failure
			}
		}
	}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		
		GoogleShare.getInstance().onActivityResult(requestCode, resultCode, data);

}

2 如果是从相册获取图片,也可以先对图片进行压缩再分享

​
Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
if (Build.VERSION.SDK_INT < 19) {
     intent.setAction(Intent.ACTION_GET_CONTENT);
} else {
   intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
}
startActivityForResult(intent, 0);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	// TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
		
    if (requestCode == 0 && resultCode == RESULT_OK) {
		Intent shareIntent = new       PlusShare.Builder(this).setType("image/*").setText("title")
					.setStream(data.getData()).getIntent();
			startActivityForResult(shareIntent, Constant.RC_GOOGLE_SHARE);
		}
		
}

​

3 AndroidManifest.xml

<meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

二 facebook分享

需要在平台创建应用和获取应用编号,具体我上一篇facebook登录说明了

1图片和链接分享

​
public class FacebookShare {
	public static CallbackManager manager = CallbackManager.Factory.create();

	private static FacebookShare mInstance;
	private ShareDialog shareDialog;

	public static FacebookShare getInstance() {
		if (mInstance == null) {
			mInstance = new FacebookShare();
		}
		return mInstance;
	}

	public void share(Activity activity, String imagePath, String link, String title, String desc) {
		try {
			shareDialog = new ShareDialog(activity);
			shareDialog.registerCallback(manager, new FacebookCallback<Sharer.Result>() {
				@Override
				public void onCancel() {
					//cancel
				}

				@Override
				public void onError(FacebookException error) {
					//
				}

				@Override
				public void onSuccess(Sharer.Result result) {
					//success
				}
			});

			if (imagePath != null) {
				if (ShareDialog.canShow(SharePhotoContent.class)) {
					// 本地图片
					Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
					// 压缩图片
					Bitmap newBitmap = BitmapUtil.getBitmap(bitmap);
					SharePhoto photo = new SharePhoto.Builder().setCaption(title).setBitmap(newBitmap).build();
					SharePhotoContent photoContent = new SharePhotoContent.Builder().addPhoto(photo).build();
					shareDialog.show(photoContent);
				}
			}

			if (!link.equals("")) {
				if (ShareDialog.canShow(ShareLinkContent.class)) {
					// 链接
					ShareLinkContent linkContent = new ShareLinkContent.Builder().setContentTitle(title)
							.setContentDescription(desc).setContentUrl(Uri.parse(link)).build();
					shareDialog.show(linkContent);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		FacebookShare.manager.onActivityResult(requestCode, resultCode, data);		
	}

​

​

2 如果是从相册获取图片,也可以先对图片进行压缩再分享

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		
		if (requestCode == 0 && resultCode == RESULT_OK) {
			SharePhoto photo = new SharePhoto.Builder().setCaption("title").setImageUrl(data.getData()).build();
			SharePhotoContent photoContent = new SharePhotoContent.Builder().addPhoto(photo).build();
			shareDialog.show(photoContent);
		}
		
	}

3 AndroidManifest.xml

<meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />

<provider 
    android:name="com.facebook.FacebookContentProvider"                            android:authorities="com.facebook.app.FacebookContentProvider1743673192422114"
            android:exported="true" />

        <!-- 浏览器分享卡片,未安装客户端时弹出 -->
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="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="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>

三 twitter分享

不需要申请,直接代码

1图片和链接分享

​
public class TwitterShare {
	private static TwitterShare mInstance;

	public static TwitterShare getInstance() {
		if (mInstance == null) {
			mInstance = new TwitterShare();
		}
		return mInstance;
	}

	public void share(Activity mContext, String imagePath, String link, String title) {
		try {
			TwitterAuthConfig authConfig = new TwitterAuthConfig(mContext.getString(R.string.twitter_consumer_key),
					mContext.getString(R.string.twitter_consumer_secret));
			Fabric.with(mContext, new TwitterCore(authConfig));
			
			TweetComposer.Builder builder = new TweetComposer.Builder(mContext);
			builder.text(title);
			//本地图片
			if (!imagePath.equals("")) {
				File file = new File(imagePath);
				Uri imageUri = URIUtil.getImageContentUri(mContext, file);
				Log.d("TwitterShare", imageUri.getPath());
				builder.image(imageUri);
			}
			//链接
			if (!link.equals("")) {
				builder.url(new URL(link));
			}

			builder.show();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	
}

​
<string name="twitter_consumer_key"></string>
    <string name="twitter_consumer_secret"></string>

这个key可以随便,但一定要有

2 如果是从相册获取图片,也可以先对图片进行压缩再分享

​
@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		
		if (requestCode == 0 && resultCode == RESULT_OK) {
            //和上面一样,就是参数换了
			builder.image(data.getData());
		}
		
	}

​

3 twitter分享回调

​
public class TwitterResultReceiver extends BroadcastReceiver {

	private String UPLOAD_SUCCESS = "com.twitter.sdk.android.tweetcomposer.UPLOAD_SUCCESS";
	private String UPLOAD_FAILURE = "com.twitter.sdk.android.tweetcomposer.UPLOAD_FAILURE";
	private String TWEET_COMPOSE_CANCEL = "com.twitter.sdk.android.tweetcomposer.TWEET_COMPOSE_CANCEL";

	@Override
	public void onReceive(Context context, Intent intent) {
		if (UPLOAD_SUCCESS.equals(intent.getAction())) {
			// success Twitter分享成功的回调
			
		} else if (UPLOAD_FAILURE.equals(intent.getAction())) {
			// failure
			
		} else if (TWEET_COMPOSE_CANCEL.equals(intent.getAction())) {
			// cancel
			
		}
	}
}


​

4 AndroidManifest.xml

​
<!-- Twitter分享的接受广播 -->
        <receiver
            android:name="com.xnhd.japansdk.share.TwitterResultReceiver"
            android:exported="false" >
            <intent-filter>
                <action android:name="com.twitter.sdk.android.tweetcomposer.UPLOAD_SUCCESS" />
                <action android:name="com.twitter.sdk.android.tweetcomposer.UPLOAD_FAILURE" />
                <action android:name="com.twitter.sdk.android.tweetcomposer.TWEET_COMPOSE_CANCEL" />
            </intent-filter>
        </receiver>

        <meta-data android:name="io.fabric.ApiKey" android:value="YOUR_API_KEY"/>

经过验证,这个key可以随便,但一定要有

​

Twitter这个分享回调好像没什么卵用!!!

四 工具类

public class BitmapUtil {

	// 压缩图片
	public static Bitmap getBitmap(Bitmap imageBitmp) {
		try {
			Bitmap newBitmap = null;
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			imageBitmp.compress(CompressFormat.JPEG, 30, baos);
			byte[] bytes = baos.toByteArray();
			newBitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
			Log.i("wechat", "压缩后图片的大小" + (newBitmap.getByteCount() / 1024 / 1024) + "宽度为" + newBitmap.getWidth() + "高度为"
					+ newBitmap.getHeight() + "bytes.length=  " + (bytes.length / 1024) + "KB");
			return newBitmap;
		} catch (Exception e) {
			e.printStackTrace();
		}

		return imageBitmp;
	}

}

public class URIUtil {
		
	/**
	 * 绝对路径转uri
	 *
	 * @param context
	 * @param imageFile
	 * @return content Uri
	 */
	public static Uri getImageContentUri(Context context, java.io.File imageFile) {
	    String filePath = imageFile.getAbsolutePath();
	    Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
	            new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=? ",
	            new String[]{filePath}, null);
	    if (cursor != null && cursor.moveToFirst()) {
	        int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
	        Uri baseUri = Uri.parse("content://media/external/images/media");
	        return Uri.withAppendedPath(baseUri, "" + id);
	    } else {
	        if (imageFile.exists()) {
	            ContentValues values = new ContentValues();
	            values.put(MediaStore.Images.Media.DATA, filePath);
	            return context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
	        } else {
	            return null;
	        }
	    }
	}
}

五 如果想分享网络图片(http://)这样的,可以用工具将图片下载到本地,不过一般接入好像没有分享网络图片的,哈哈哈

jar,网络上很多,分享到此结束!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值