Android系统分享,微信SDK分享,ShareSdk分享
2016-11-26 09:38
337 查看
1.调用系统分享功能:
我的思考:系统分享图片,读取sd卡的图片,文件路径写到/DCIM/Camera不能发送出去,写/DCIM/Camera/a.jpg显示为无效文件,喵呜~
用Uri.parse("一个网址");怎么不可以呢,喵呜~
解决方案:向文件种写入图片
Android实现分享内容到微信朋友圈
微信分享(发送到朋友,发送到朋友圈)
注意:由于分享功能是使用隐式调用activity实现的,则需在响应的activity中声明intent-filter,在对应的activity的xml文件里加上
2.微信SDK分享
Android接入指南
分享与收藏功能开发文档(Android应用)
proguard-rules.pro:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />3.ShareSDK分享:
Android 不同平台分享内容的详细说明
关于如何检查平台签名的正确性
ShareSDK关于微信分享问题
注意:记得导包 add as library
debug签名和正式包签名是不一样的
//分享文字 private void shareText() { Intent it = new Intent(Intent.ACTION_SEND); it.setType("text/plain"); it.putExtra(Intent.EXTRA_TEXT,"http://stormzhang.com/posts/"); it.putExtra(Intent.EXTRA_SUBJECT,"张大帅气的博客"); startActivity(Intent.createChooser(it,"分享到")); } //分享单张图片 private void shareImage() { Intent it1 = new Intent(Intent.ACTION_SEND); it1.setType("image/jpg"); String path = Environment.getExternalStorageDirectory() + File.separator + "a.jpg"; Uri uri = Uri.fromFile(new File(path)); it1.putExtra(Intent.EXTRA_STREAM,uri); startActivity(it1); } //分享多张图片 private void shareImages() { Intent it2 = new Intent(Intent.ACTION_SEND_MULTIPLE); it2.setType("image*/"); ArrayList<Uri> uriList = new ArrayList(); String path = Environment.getExternalStorageDirectory() + File.separator; uriList.add(Uri.fromFile(new File(path+"a.jpg"))); uriList.add(Uri.fromFile(new File(path+"b.jpg"))); it2.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uriList); }
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
private String getSDPath() { File sdDir = null; //判断sd卡是否存在 boolean sdCardExist = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); if (sdCardExist){ sdDir = Environment.getExternalStorageDirectory();//获取根目录 }else{ Log.i(TAG, "getSDPath: "+"sd卡不存在"); } return sdDir.toString(); }
我的思考:系统分享图片,读取sd卡的图片,文件路径写到/DCIM/Camera不能发送出去,写/DCIM/Camera/a.jpg显示为无效文件,喵呜~
用Uri.parse("一个网址");怎么不可以呢,喵呜~
解决方案:向文件种写入图片
private void shareImage() { File f = new File(Environment.getExternalStorageDirectory(), "back"); Log.i(TAG, "shareImage: " + f);//-----------/storage/emulated/0/back if (f.exists()) { f.delete(); } try { FileOutputStream out = new FileOutputStream(f); Bitmap bm = BitmapFactory.decodeResource(getResources(), R.mipmap.aaa);//加载图片(res,id) bm.compress(Bitmap.CompressFormat.PNG, 90, out);//压缩图片 90是压缩率 表示压缩10% 不压缩是100.表示压缩率为0-----压缩图片然后写入文件中 out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Intent it = new Intent(Intent.ACTION_SEND); ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI");//单张图片 // ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");//多张图片 it.setComponent(comp); it.setType("image/*"); it.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f)); startActivity(Intent.createChooser(it, "分享到")); }重点:系统分享不能分享文字+图片的 文字不能分享到盆友圈 单张图片分享至盆友圈资源获取失败
Android实现分享内容到微信朋友圈
微信分享(发送到朋友,发送到朋友圈)
注意:由于分享功能是使用隐式调用activity实现的,则需在响应的activity中声明intent-filter,在对应的activity的xml文件里加上
<!--接收单图--> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="image/*"/> </intent-filter> <!--接收文本--> <intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain"/> </intent-filter> <!--接收多图--> <intent-filter> <action android:name="android.intent.action.SEND_MULTIPLE"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="image/*"/> </intent-filter>
2.微信SDK分享
Android接入指南
分享与收藏功能开发文档(Android应用)
package com.example.a27c1.share_demo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import com.tencent.mm.sdk.modelmsg.SendMessageToWX; import com.tencent.mm.sdk.modelmsg.WXMediaMessage; import com.tencent.mm.sdk.modelmsg.WXWebpageObject; import com.tencent.mm.sdk.openapi.IWXAPI; import com.tencent.mm.sdk.openapi.WXAPIFactory; public class MainActivity extends AppCompatActivity { private static final String APP_ID = "wxe9ba6ca169c4fc00"; private IWXAPI iwxapi; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { iwxapi = WXAPIFactory.createWXAPI(MainActivity.this,APP_ID,true); iwxapi.registerApp(APP_ID); shareWX(); } }); } private void shareWX() { WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl="http://stormzhang.com/"; WXMediaMessage msg = new WXMediaMessage(webpage); msg.title="stormzhang"; msg.descriptio 4000 n="张大帅气的博客"; SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = String.valueOf(System.currentTimeMillis()); req.message = msg; req.scene = SendMessageToWX.Req.WXSceneSession; iwxapi.sendReq(req); } }
proguard-rules.pro:
-keep class com.tencent.mm.sdk.** { *; }还有权限和导包
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />3.ShareSDK分享:
package com.example.a27c1.share_demo; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import com.review.signature.Review; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.ShareSDK; import cn.sharesdk.onekeyshare.OnekeyShare; import cn.sharesdk.onekeyshare.ShareContentCustomizeCallback; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Review.MD5Review(this, "com.example.a27c1.share_demo", "15b50fe01696c3dd890ab2892c541b7b"); ShareSDK.initSDK(this); findViewById(R.id.btn_shareSDK).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showShare(); } }); } private void showShare() { ShareSDK.initSDK(this); OnekeyShare oks = new OnekeyShare(); oks.disableSSOWhenAuthorize();//关闭sso授权 // 分享时Notification的图标和文字 2.5.9以后的版本不调用此方法 //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name)); // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用 oks.setTitle("stormzhang"); // titleUrl是标题的网络链接,仅在人人网和QQ空间使用 oks.setTitleUrl("http://sharesdk.cn"); // text是分享文本,所有平台都需要这个字段 oks.setText("张大帅气的博客"); // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数 //oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片 // url仅在微信(包括好友和朋友圈)中使用 oks.setUrl("http://stormzhang.com/"); // comment是我对这条分享的评论,仅在人人网和QQ空间使用 oks.setComment("我是测试评论文本"); // site是分享此内容的网站名称,仅在QQ空间使用 oks.setSite(getString(R.string.app_name)); // siteUrl是分享此内容的网站地址,仅在QQ空间使用 oks.setSiteUrl("http://sharesdk.cn"); oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg"); oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback() { @Override public void onShare(Platform platform, cn.sharesdk.framework.Platform.ShareParams paramsToShare) { if ("QZone".equals(platform.getName())) { paramsToShare.setTitle(null); paramsToShare.setTitleUrl(null); } if ("SinaWeibo".equals(platform.getName())) { paramsToShare.setUrl(null); paramsToShare.setText("分享文本 http://www.baidu.com"); } if ("Wechat".equals(platform.getName())) { Bitmap imageData = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); paramsToShare.setImageData(imageData); } if ("WechatMoments".equals(platform.getName())) { Bitmap imageData = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); paramsToShare.setImageData(imageData); } } }); //微信setTitle,setText,setUrl oks.show(this);// 启动分享GUI } }ShareSDK常见问题
Android 不同平台分享内容的详细说明
关于如何检查平台签名的正确性
ShareSDK关于微信分享问题
注意:记得导包 add as library
debug签名和正式包签名是不一样的
相关文章推荐
- [Android]不经过第三方SDK直接调用系统自带分享QQ、微信
- android 不调用微信,易信等SDK实现实现一键分享图片文字到微信,易信,以及全部可选app
- Android:QQ分享、微信分享、朋友圈分享(不使用第三方SDK)
- Android微信SDK实现分享
- Android调用系统分享直接抵达微信
- 使用友盟社会化分享安卓android版SDK分享纯图片到微信
- Android应用之——微信微博第三方sdk登录分享使用过程中的一些常见问题
- ShareSDK Android 微信分享 绕过审核与不绕过审核
- Android编程之微信SDK分享功能过程步骤详细分析
- Unity 接入ShareSDK Android&iOS 微信分享
- Android 分享app到QQ好友、微信好友、朋友圈(无需提供SDK,只需调用相关的Activity)
- 【遇见Android bug】微信分享SDK不跳转的原因
- ShareSDK Android 微信分享 绕过审核与不绕过审核
- Unity开发之接入Sharesdk微信分享Android
- Android ShareSdk 微信分享的步骤
- Android 微信SDK分享功能中的最全过程步骤分析
- shareSDK[Android常见问题] 微信分享
- 微信SDK分享功能中最该注意的地方Android
- 【社交分享SDK】ShareSDK for Android 2.5.9已经发布
- android中关于图片分享到QQ或者微信,朋友圈及其他(免SDK)