facebook和twitter的截图分享

记录一下代码,以后自己可以抄。。我抄我自己=。=

SDK的接入看之前的博客。所以话不多少,直接上代码(记得分享一定要安装原生app(FB和twitter),不然只通过网页分享无法发图片。),初始化都在onCreate()中

一、截屏(android 5.0以上)

定义:

CallbackManager callbackManager;
ShareDialog shareDialog;
GameRequestDialog requestDialog;
ImageReader mImageReader;

 

(1)获取截屏权限

startActivityForResult(((MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE)).createScreenCaptureIntent(),1);

(2)截屏回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e("Facebook1", "onActivityResult");
AndroidLog("requestCode:"+String.valueOf(requestCode)+"resultCode"+String.valueOf(resultCode));
super.onActivityResult(requestCode, resultCode, data);

parseData(data);

}
    private void parseData(Intent data){
        MediaProjection mMediaProjection = ((MediaProjectionManager)getSystemService(Context.MEDIA_PROJECTION_SERVICE)).getMediaProjection(Activity.RESULT_OK,data);
if (mMediaProjection == null)
return;
AndroidLog("截屏初始化");

mImageReader = ImageReader.newInstance(
getScreenWidth(this),
getScreenHeight(this),
PixelFormat.RGBA_8888,1);
// AndroidLog(mImageReader.toString());
VirtualDisplay mVirtualDisplay = mMediaProjection.createVirtualDisplay("screen-mirror",
getScreenWidth(this),
getScreenHeight(this),
Resources.getSystem().getDisplayMetrics().densityDpi,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
mImageReader.getSurface(), null, null);
}
 
public static int getScreenWidth(Context context)
{
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(outMetrics);
return outMetrics.widthPixels;
}
public static int getScreenHeight(Context context)
{
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(outMetrics);
return outMetrics.heightPixels;
}

二、facebook分享和邀请

(1)初始化facebook

/**
* facebook配置, 在oncreate()方法中调用
*/
private void initFacebook() {
//抽取成员变量
callbackManager = CallbackManager.Factory.create();
shareDialog = new ShareDialog(this);//分享
requestDialog = new GameRequestDialog(this);//邀请好友

// this part is optional
shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {

@Override
public void onSuccess(Sharer.Result result) {
//分享成功的回调,在这里做一些自己的逻辑处理
}

@Override
public void onCancel() {

}

@Override
public void onError(FacebookException error) {
AndroidLog(error.toString());
}
});

requestDialog.registerCallback(callbackManager,
new FacebookCallback<GameRequestDialog.Result>() {
public void onSuccess(GameRequestDialog.Result result) {
String id = result.getRequestId();
}
public void onCancel() {}
public void onError(FacebookException error) {}
}
);

}

(2)分享
/**
* 这是一个按钮的点击事件,分享到facebook
* 若未安装facebook客户端,则会跳转到浏览器
*
* @param
*/
public void shareToFacebook() {
//这里分享一个链接,更多分享配置参考官方介绍:https://developers.facebook.com/docs/sharing/android
AndroidLog("点击分享按钮");
Image image = mImageReader.acquireLatestImage();
int width = image.getWidth();
int height = image.getHeight();
final Image.Plane[] planes = image.getPlanes();
final ByteBuffer buffer = planes[0].getBuffer();
int pixelStride = planes[0].getPixelStride();
int rowStride = planes[0].getRowStride();
int rowPadding = rowStride - pixelStride * width;
Bitmap mBitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height, Bitmap.Config.ARGB_8888);
mBitmap.copyPixelsFromBuffer(buffer);
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, width, height);
image.close();
//AndroidLog(mBitmap.toString());
//上一步获得位图后直接分享,不保存在本地。
SharePhoto photo = new SharePhoto.Builder()
.setBitmap(mBitmap)
.build();
SharePhotoContent content = new SharePhotoContent.Builder()
.addPhoto(photo)
.build();

(3)邀请

private void onClickRequestButton() {
GameRequestContent content = new GameRequestContent.Builder()
.setMessage("Come play this Game !! This test facebook sdk")
.build();
requestDialog.show(content);
}

三、Twitter分享

(1)初始化

Twitter.initialize(this);

(2)分享
public void shareToTwitter() {
Image image = mImageReader.acquireLatestImage();
    int width = image.getWidth();
int height = image.getHeight();
final Image.Plane[] planes = image.getPlanes();
final ByteBuffer buffer = planes[0].getBuffer();
int pixelStride = planes[0].getPixelStride();
int rowStride = planes[0].getRowStride();
int rowPadding = rowStride - pixelStride * width;
Bitmap mBitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height, Bitmap.Config.ARGB_8888);
mBitmap.copyPixelsFromBuffer(buffer);
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, width, height);
image.close();

//套路还是一样的,只是twitter分享图片需要填uri
ContentValues values = new ContentValues();
//values.put(MediaStore.Images.Media.insertImage() , "jinta");
Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI ,values);
AndroidLog("URI路径 :"+uri.toString());
OutputStream os = null;
try
{
// 获取刚插入的数据的Uri对应的输出流
os = getContentResolver().openOutputStream(uri);
// 将bitmap图片保存到Uri对应的数据节点中
mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.close();
}
catch (IOException e) {
e.printStackTrace();
}

TweetComposer.Builder builder = new TweetComposer.Builder(this)
.text("Can you help complete all the orders and save the factory?")
.image(uri);//using content://.... FileProvider.getUriForFile(this,APPID.file_provider,new File("/path/to/image"));
builder.show();
}

猜你喜欢

转载自www.cnblogs.com/bugcreate-yzc/p/9669535.html