1.調用系統分享功能:
//分享文字
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 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, "分享到"));
}
重點:系統分享不能分享文字+圖片的 文字不能分享到盆友圈 單張圖片分享至盆友圈資源獲取失敗
注意:由於分享功能是使用隱式調用activity實現的,則需在響應的activity中聲明intent-filter,在對應的activity的xml文件里加上
2.微信SDK分享
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.description="張大帥氣的博客";
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.** {
*;
}還有權限和導包
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常見問題
ShareSDK關於微信分享問題
注意:記得導包 add as library
debug簽名和正式包簽名是不一樣的