android分享sdk
⑴ android 用sharesdk 分享給微信好友的時候分享成功以後彈出的對話框返回第三方工具還是停留在微信的問題
說明你還是沒有仔細的去看分享文檔,肯定有說明的,可能是你的方法和參數不對
⑵ android集成分享sdk後怎麼代碼混淆
為了保護代碼被反編譯,android引入了混淆代碼的概念
1.設置混淆
在工程下找到project.properties文件
在文件中加入proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt這個是系統的
也可以用自己的混淆文件(這樣就可以配置一些自己的東西),去sdk.dir}/tools/proguard/ 下復制proguard-android.txt文件到本地工程中
然後設置成proguard.config=proguard-android.txt
project.properties文件:
[java] view plain
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
proguard.config=proguard-android.txt
# Project target.
target=android-17
-injars androidtest.jar【jar包所在地址】
-outjars out【輸出地址】
-libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的庫的jar,用於解析injars所指定的jar類】
-optimizationpasses 5
-dontusemixedcaseclassnames 【混淆時不會產生形形色色的類名 】
- 【指定不去忽略非公共的庫類。 】
-dontpreverify 【不預校驗】
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【優化】
-keep public class * extends android.app.Activity【不進行混淆保持原樣】
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public abstract interface com.asqw.android.Listener{
public protected <methods>; 【所有方法不進行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【對該方法不進行混淆】
}
-keepclasseswithmembernames class * { 【保護指定的類和類的成員的名稱,如果所有指定的類成員出席(在壓縮步驟之後)】
native <methods>;
}
-keepclasseswithmembers class * { 【保護指定的類和類的成員,但條件是所有指定的類和類成員是要存在。】
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {【保護指定類的成員,如果此類受到保護他們會保護的更好 】
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {【保護指定的類文件和類的成員】
public static final android.os.Parcelable$Creator *;
}
=====================================常見異常===================================
參考:http://blog.csdn.net/vrix/article/details/7100841
加入第三方jar包之後常出現的幾個異常:
proguard returned with error code 1.See console
情況1:
Proguard returned with error code 1. See console
Error: C:/Documents (系統找不到指定文件)
後來發現是因為將整個工程放到了桌面上,而桌面的目錄是C:/Documents and Settings/Administrator/桌面,在這裡面有空格,而proguard進行發編譯的時候是不允許有空格的
如果換了正確路徑還不好用的話,直接刪除proguard就好了
注意:SDK和程序路徑最好不要有空格符
情況2:
Proguard returned with error code 1. See console
異常:
java.lang.
解決辦法:將proguard.cfg中的"-dontpreverify"改成「-dontoptimize」
參考文章:http://groups.google.com/group/android-developers/browse_thread/thread/eca3b0f5ce6ad00f
我把項目中生成的proguard文件夾(此時文件夾是空的)刪掉,然後再重新運行項目,就OK 了。
情況3:
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] Proguard returned with error code 1. See console
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] java.io.IOException: Can't read [proguard.ClassPathEntry@106082] (No such file or directory)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:230)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:200)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:178)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.execute(InputReader.java:100)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.readInput(ProGuard.java:195)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.execute(ProGuard.java:78)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.main(ProGuard.java:499)
拋出這樣的異常的原因是第三方jar的引用路徑不對,沒有找到這個需要忽略混淆的jar包。
========================官方文檔翻譯========================================
原文
http://developer.android.com/guide/developing/tools/proguard.html
混淆器(ProGuard)
在本文中(In this document)
Enabling ProGuard
Configuring ProGuard
Decoding Obfuscated Stack Traces
Debugging considerations for published applications
參見
ProGuard Manual ?
ProGuard ReTrace Manual ?
混淆器通過刪除從未用過的代碼和使用晦澀名字重命名類、欄位和方法,對代碼進行壓縮,優化和混淆。結果是一個比較小的.apk文件,該文件比較難進行逆向工程。因此,當你的應用程序對安全敏感(要求高),例如當你授權應用程序的時候,混淆器是一種重要的保護手段。
混淆器被集成在android 構建系統中,所以你不必手動調用它。同時混淆器僅在發布模式下進行構建應用程序的時候才會運行起來,所以在調試模式下構建程序時,你不必處理混淆代碼。讓混淆器運行起來是可選擇的,但是推薦選上。
這個文檔描述了怎樣啟用並配置混淆器,以及使用跟蹤(retrace)工具對混淆的堆棧跟蹤信息(stack traces)進行解碼。
啟用混淆器Enabling ProGuard
當你新建了一個Android工程之後,一個proguard.cfg文件會在工程的根目錄下自動創建。這個文件定義了混淆器是怎樣優化和混淆你的代碼的,所以懂得怎樣根據你的需要來定製是非常重要的。預設的配置文件僅覆蓋到了通常情況,所以根據你的需求,很可能需要編輯它。接下來的內容是關於通過定製混淆器配置文件來對混淆器配置。
為了讓啟用混淆器作為Ant或者Eclipse構建過程中一部分,可以在<project_root>/default.properties文件中,設置proguard.config屬性。路徑可以是絕對路徑或者工程根目錄的相對路徑。
如果你讓proguard.cfg文件在預設位置(工程的根目錄),你可以像這樣指定位置:
proguard.config=proguard.cfg
同樣,你可以把該文件放到任意的位置,並指定它的絕對路徑。
proguard.config=/path/to/proguard.cfg
當你在發布模式下,或者通過運行ant release,或者通過使用Eclipse中的Export Wizard構建你的應用程序的時候,構建系統都會自動地去檢查proguard.config屬性是否被設置了。如果被設置了,混淆器在把所有東西打包成.apk文件之前,自動地對應用程序位元組碼進行混淆處理。而在調試模式中構建則不會調用混淆器,因為那樣調試會更加繁重。
運行混淆器之後輸出的文件有:
mp.txt
描述.apk包中所有class文件的內部結構。
mapping.txt
列出了源代碼與混淆後的類,方法和屬性名字之間的映射。這個文件對於在構建之後得到的bug報告是有用的,因為它把混淆的堆棧跟蹤信息反翻譯為源代碼中的類,方法和成員名字。更多信息,查看解碼混淆過的堆棧跟蹤信息。
seeds.txt
列出那些未混淆的類和成員。
usage.txt
列出從.apk中剝離的代碼。
這些文件放在以下目錄中:
注意:每次在發布模式下構建時,這些文件都會被最新的文件覆蓋。所以每次發布程序時候,為了反混淆來自構建時產生的bug報告,請保存這些文件的一個拷貝。對於為什麼要保存這些文件的重要性的更多信息,請查看程序發布調試注意事項。
混淆器配置(proguard config)
某些情況下,proguard.cfg文件的預設配置可以滿足需求了。但是,對於混淆器來說,大多數情況做出正確的分析是困難的,並且它或許會刪除在它看來是無用的,但對於程序來說卻確實需要的代碼。一些例子如下:
一個僅引用於AndroidManifest.xml文件的類。
一個通過JNI調用的方法。
動態引用的屬性和方法。
<project_root>/bin/proguard 當你使用Ant時
<project_root>/proguard 當你使用Eclipse時
解碼混淆過的堆棧跟蹤信息(Decoding Obfuscated Stack Traces)
當混淆代碼並輸出了一個堆棧調試信息時,這些方法名字是混淆過的,雖然可以進行調試,但是調試變得困難。幸運的是,每當混淆器運行時候,它都會輸出到文件<project_root>/bin/proguard/mapping.txt中,該文件包含了從原始類,方法和屬性名字到混淆後名字的映射。
Windows系統中retrace.bat腳本命令或者Linux和Mac OS X系統中retrace.sh腳本命令能把混淆後的堆棧調試信息轉換為可以理解的文件。它被放在<sdk_root>/tools/proguard/目錄下。運行retrace工具的命令語法是:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
如果你沒有為<stracktrace_file>指定值,那麼retrace工具從標准輸入讀取。
已發布應用程序的調試注意事項(Debugging considerations for published applications)
保存好每一個已發布給用戶的程序的mapping.txt文件。通過保存發布構建版本的mapping.txt文件拷貝,確保當用戶碰到bug,並把混淆後的堆棧調試跟蹤信息提交給你時,你可以進行調試從而修復問題。程序的mapping.txt文件在每次發布構建時都會被覆蓋,所以你一定要注意保存正確的版本。
例如,假設你已經發布了一個應用程序並在繼續在新的版本中開發添加新的功能。接著你馬上啟動混淆器並創建一個新的發布版本。該操作把mapping.txt文件覆蓋了。一個用戶提交了來自當前發布版本的bug報告,該報告包含了堆棧調試信息。你再也不能對用戶的堆棧信息進行調試了,因為這個對應用戶本機上版本的mapping.txt文件不存在了。其他覆蓋mapping.txt文件的情況還有很多,所以對於每一個可能需要調試的版本,你都要確保有一份拷貝。
⑶ 最新的新浪微博客戶端ANDROID版 SDK到底怎麼用
本文介紹了如何在Android程序中使用新浪微博提供的AndroidSDK
微博Android平台SDK為第三方微博應用提供了文檔易用的微博API調用服務,使第三方客戶端無需了解復雜的驗證,API調用過程。並可以實現分享到微博的功能,可以分享文字,或者多媒體信息到內置的分享頁面,並發送到微博。
首先我們需要在新浪微博開放平台上進行注冊,之後需要創建一個新的應用,並且需要記下應用的APP key,App Secret Key以及設置應用的回調頁以便我們在程序中進行使用。此外,還需要在應用的高級信息里添加測試用戶的uid,切記切記,否則會出現登陸不成功等怪現象。
接著我們下載微博提供的Android上的SDK,下載地址在這里http。//open。weibo。com/wiki/SDK,選擇AndroidSDK進行下載即可。
使用方法:
首先將下載的sdk進行解壓,並將其導入到eclipse中,接著在你需要使用sdk的android工程中點擊右鍵,屬性,設置library屬性,選中剛才導入的weibosdk即可。如圖所示
然後在你的工程的Manifest文件中,加入以下許可權:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
這樣我們就能使用weibosdk了
建立工程以後如何在代碼中使用weiboAPI呢,下面就由我來為大家介紹使用方法:
首先在你需要使用微博的Activity中加入以下代碼:
Weibo weibo = Weibo.getInstance();
weibo.setupConsumerConfig(Constants.CONSUMER_KEY,Constants.CONSUMER_SECRET);
weibo.setRedirectUrl("Your URLhere");
weibo.authorize(this,
listener);
注意代碼中的Constants.CONSUMER_KEY,Constants.CONSUMER_SECRET即是文章開頭介紹的在微博上創建的應用里的兩個key,setRedirectUrl中的內容即是在應用中設置的回調頁。
Listener則是在進行登陸授權後對執行結果進行處理的Litener,代碼如下
public class AuthDialogListener implements WeiboDialogListener {
private Activity context;
private String content;
private String file;
private float lat;
private float lon;
private static boolean isOver=true;
public AuthDialogListener(Activity context,String content,String file,float lat,float lon){
this.context= context;
this.content=content;
this.file=file;
this.lat=lat;
this.lon=lon;
}
@Override
public void onComplete(Bundle values) {
String token = values.getString("access_token");
String expires_in = values.getString("expires_in");
String oauth_verifier = values.getString("oauth_verifier");
AccessToken accessToken = new AccessToken(token, Constants.CONSUMER_SECRET);
accessToken.setExpiresIn(expires_in);
accessToken.setVerifier(oauth_verifier);
Weibo.getInstance().setAccessToken(accessToken);
try {
if (isOver) {
isOver=false;
share2weibo(this.content,null,listener,lat,lon);
}
} catch (WeiboException e) {
e.printStackTrace();
}
}
@Override
public void onError(DialogError e) {
Toast.makeText(context.getApplicationContext(),
"Auth error : " + e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancel() {
Toast.makeText(context.getApplicationContext(), "Auth cancel",
Toast.LENGTH_LONG).show();
}
@Override
public void onWeiboException(WeiboException e) {
Toast.makeText(context.getApplicationContext(),
"Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
.show();
}
private void share2weibo(String content,String file,RequestListener listener,float lat , float lon) throws WeiboException {
Weibo weibo = Weibo.getInstance();
WeiboParameters params= new WeiboParameters();
params.add("access_token", weibo.getAccessToken().getToken());
params.add("status", content);
params.add("lat", String.valueOf(lat));
params.add("long", String.valueOf(lon));
String url = Weibo.SERVER + "statuses/update.json";
if (file!=null&&!file.equalsIgnoreCase("")) {
params.add("pic", file);
url = Weibo.SERVER + "statuses/upload.json";
}
AsyncWeiboRunner runner = new AsyncWeiboRunner(weibo);
runner.request(this.context, url, params,Utility.HTTPMETHOD_POST,listener);
}
RequestListener listener= new RequestListener() {
@Override
public void onIOException(IOException e) {
isOver=true;
Toast.makeText(context, "RequestListener "+e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onError(WeiboException e) {
isOver=true;
Toast.makeText(context, "RequestListener "+e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onComplete(String response) {
isOver=true;
Toast.makeText(context, "Success!", Toast.LENGTH_LONG).show();
}
};
}
需要完成WeiboDialogListener介面中的方法,分別是onComplete,OnError,
OnCancel,OnWeiboException。其中Oncomplete是在微博登陸授權成功後會執行的方法,在這個方法中,你可以調用你想要的功能如發表微博,轉發,評論等。使用的代碼可參看以下代碼:
Weibo weibo = Weibo.getInstance();
WeiboParameters params= new WeiboParameters();
params.add("access_token", weibo.getAccessToken().getToken());
params.add("status", content);
params.add("lat", String.valueOf(lat));
params.add("long", String.valueOf(lon));
String url = Weibo.SERVER + "statuses/update.json";
AsyncWeiboRunner runner = new AsyncWeiboRunner(weibo);
runner.request(this.context,url,params,Utility.HTTPMETHOD_POST,listener);
其中params是調用weibo api中需要的具體參數,可根據需要進行添加
AsyncWeiboRunner 是用來執行具體請求的類,根據你設定的參數發起請求。注意這里又有一個listerner,而這個listener是對發起請求後的結果進行處理的回調類,
RequestListener listener= new RequestListener()
需要復寫的方法有OnIOException,onError,onComplete,這樣可以清楚地對各種情況進行處理。
這樣在程序中就可以使用新浪微博 android sdk了。
⑷ android開發 請問用qq分享文件怎麼分享sdk例子上都是些 分享圖片音樂什麼的 不知道文件應該怎麼分享
Intentshare=newIntent(Intent.ACTION_SEND);
ComponentNamecomponent=newComponentName("com.tencent.mobileqq","com.tencent.mobileqq.activity.JumpActivity");
share.setComponent(component);
Filefile=newFile(Environment.getExternalStorageDirectory()+"/001.jpg");
System.out.println("file"+file.exists());
share.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(file));
share.setType("*/*");
startActivity(Intent.createChooser(share,"發送"));
⑸ 用 微信的 android SDK 怎麼分享信息 到微信
用 微信的 android SDK分享信息到微信,方法如下:
1、第一步:登錄微信開放平台,必須注冊了開發者賬號,然後在開放平台添加用於分享信息到微信的Android應用,例如:網路知道APP
2、添加的應用必須審核通過,然後會獲取一個APP_ID和一個APP_SECRET,用於在Android應用中使用
3、在微信開發平台「資源下載頁面」下載對應的SDK庫文件,同時可以下載一個Demo案例
4、想要成功分享信息到微信,比如在Eclipse開發完Android應用後,使用自定義的簽名對APP進行簽名,然後將簽名字元串填寫到微信開放平台審核的應用中(這一步很重要),否則頻繁閃退,分享信息失敗!
⑹ mob中sharesdk for android v2.8.2怎麼用
由於第一次使用,所以需要先進行新浪授權,授權界面下面開始介紹如何使用ShareSDK實現微博的分享功能(其他平台的類似)shareSDK傳送門在使用shareSDK之前,我們需要先到新浪微博的開放平台進行注冊,獲得appkey以及其他的信息新浪微博開放平台傳送門下面圖片中劃掉的部分是要重點關注的特別需要注意的是,下面的回調網址必須填寫,而且在代碼中有涉及,使用默認的即可至此,開發之前的准備工作已經做好了,下面還是貼代碼首先看一下布局文件代碼,很簡單,只有一個按鈕06.07.12.13.MainActivity.javapackagecom.heli17.weiboonekeylogin;002.003.importjava.io.File;004.importjava.io.FileOutputStream;005.importjava.util.HashMap;006.007.importandroid.app.Activity;008.importandroid.app.Notification;009.importandroid.app.NotificationManager;010.importandroid.app.PendingIntent;011.importandroid.content.Context;012.importandroid.content.Intent;013.importandroid.graphics.Bitmap;014.importandroid.graphics.Bitmap.CompressFormat;015.importandroid.graphics.BitmapFactory;016.importandroid.os.Bundle;017.importandroid.os.Environment;018.importandroid.os.Handler.Callback;019.importandroid.os.Message;020.importandroid.view.View;021.importandroid.widget.Toast;022.importcn.sharesdk.framework.Platform;023.importcn.sharesdk.framework.PlatformActionListener;024.importcn.sharesdk.framework.ShareSDK;025.importcn.sharesdk.framework.utils.UIHandler;026.importcn.sharesdk.onekeyshare.OnekeyShare;027.028.,029.Callback{030.031.privatestaticfinalintMSG_TOAST=1;032.privatestaticfinalintMSG_ACTION_CCALLBACK=2;033.privatestaticfinalintMSG_CANCEL_NOTIFY=3;034.035.//sdcard中的圖片名稱036.privatestaticfinalStringFILE_NAME="/share_pic.jpg";037.publicstaticStringTEST_IMAGE;[email protected](Messagemsg){041.switch(msg.what){042.caseMSG_TOAST:{043.Stringtext=String.valueOf(msg.obj);044.Toast.makeText(MainActivity.this,text,Toast.LENGTH_SHORT).show();045.}046.break;047.caseMSG_ACTION_CCALLBACK:{048.switch(msg.arg1){049.case1://成功後發送Notification050.showNotification(2000,"分享完成");051.break;052.case2://失敗後發送Notification053.showNotification(2000,"分享失敗");054.break;055.case3://取消056.showNotification(2000,"取消分享");057.break;058.}059.}060.break;061.caseMSG_CANCEL_NOTIFY:062.NotificationManagernm=(NotificationManager)msg.obj;063.if(nm!=null){064.nm.cancel(msg.arg1);065.}066.break;067.}068.returnfalse;069.}[email protected](BundlesavedInstanceState){073.super.onCreate(savedInstanceState);074.setContentView(R.layout.activity_main);075.//初始化ShareSDK076.ShareSDK.initSDK(this);077.//初始化圖片路徑078.newThread(){079.publicvoidrun(){080.initImagePath();081.}082.}.start();083.}084.085.//一鍵分享的點擊事件086.publicvoidclick(Viewv){087.//實例化一個OnekeyShare對象088.OnekeyShareoks=newOnekeyShare();089.//設置Notification的顯示圖標和顯示文字090.oks.setNotification(R.drawable.ic_launcher,"ShareSDKdemo");091.//設置簡訊地址或者是郵箱地址,如果沒有可以不設置092.oks.setAddress("12345678901");093.//分享內容的標題094.oks.setTitle("分享內容的標題");095.//標題對應的網址,如果沒有可以不設置096.oks.setTitleUrl("");097.//設置分享的文本內容098.oks.setText("分享的文本內容");099.//設置分享照片的本地路徑,如果沒有可以不設置100.oks.setImagePath(MainActivity.TEST_IMAGE);101.//設置分享照片的url地址,如果沒有可以不設置102.oks.setImageUrl("/imgs/sharesdk/content/2013/07/25/1374723172663.jpg");103.//微信和易信的分享的網路連接,如果沒有可以不設置104.oks.setUrl("");105.//人人平台特有的評論欄位,如果沒有可以不設置106.oks.setComment("comment");107.//程序的名稱或者是站點名稱108.oks.setSite("site");109.//程序的名稱或者是站點名稱的鏈接地址110.oks.setSiteUrl("");111.//設置緯度112.oks.setLatitude(23.122619f);113.//設置精度114.oks.setLongitude(113.372338f);115.//設置是否是直接分享116.oks.setSilent(false);117.//顯示118.oks.show(MainActivity.this);119.}120.121.privatevoidinitImagePath(){122.try{123.if(Environment.MEDIA_MOUNTED.equals(Environment124..getExternalStorageState())125.&&Environment.getExternalStorageDirectory().exists()){126.TEST_IMAGE=Environment.getExternalStorageDirectory()127..getAbsolutePath()+FILE_NAME;128.}else{129.TEST_IMAGE=getApplication().getFilesDir().getAbsolutePath()130.+FILE_NAME;131.}132.//創建圖片文件夾133.Filefile=newFile(TEST_IMAGE);134.if(!file.exists()){135.file.createNewFile();136.Bitmappic=BitmapFactory.decodeResource(getResources(),137.R.drawable.pic);138.FileOutputStreamfos=newFileOutputStream(file);139.pic.compress(CompressFormat.JPEG,100,fos);140.fos.flush();141.fos.close();142.}143.}catch(Throwablet){144.t.printStackTrace();145.TEST_IMAGE=null;146.}147.}[email protected](){151.super.onDestroy();152.//在Activity中停止ShareSDK153.ShareSDK.stopSDK(this);154.}155.
⑺ 用 微信的 android SDK 怎麼分享信息 到微信
微信官方SDK的分享方法。
//圖片
Bitmap bt=BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.erweima); final Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bt, null,null));
//分享到朋友
private void shareToFriend(Uri uri) {
Intent intent = new Intent();
ComponentName comp = new ComponentName("com.tencent.mm",
"com.tencent.mm.ui.tools.ShareImgUI");
intent.setComponent(comp);
intent.setAction("android.intent.action.SEND");
intent.setType("image/*");
//intent.setFlags(0x3000001);
intent.putExtra(Intent.EXTRA_STREAM,uri);
startActivity(intent);
}
調用分享文本的android 系統方法。
//分享文字
public void shareText(View view) {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, "This is my Share text.");
shareIntent.setType("text/plain");
//設置分享列表的標題,並且每次都顯示分享列表
startActivity(Intent.createChooser(shareIntent, "分享到"));
}
//分享單張圖片
public void shareSingleImage(View view) {
String imagePath = Environment.getExternalStorageDirectory() + File.separator + "test.jpg";
//由文件得到uri
Uri imageUri = Uri.fromFile(new File(imagePath));
Log.d("share", "uri:" + imageUri); //輸出:file:///storage/emulated/0/test.jpg
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "分享到"));
}
//分享多張圖片
public void shareMultipleImage(View view) {
ArrayList uriList = new ArrayList<>();
String path = Environment.getExternalStorageDirectory() + File.separator;
uriList.add(Uri.fromFile(new File(path+"australia_1.jpg")));
uriList.add(Uri.fromFile(new File(path+"australia_2.jpg")));
uriList.add(Uri.fromFile(new File(path+"australia_3.jpg")));
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "分享到"));
}