android系統分享功能
㈠ 基於android天氣預報開發中的分享功能是怎麼實現的
現在的分享基本上都是現成:
android 自帶分享功能:雖然比較low,而且不同廠家顯示的分享面板可能不一樣,但是功能是可以用的,如果要開發寫高級功能的那麼需要使用到第三方的分享啦
java">/**
3. 第三方分享:使用較多的分享->Umeng(友盟),鏈接:http://www.umeng.com/
*分享功能
*
*@paramcontext上下文
*@paramactivityTitleActivity的名字
*@parammsgTitle消息標題
*@parammsgText消息內容
*@paramimgPath圖片路徑,不分享圖片則傳null
*/
publicvoidshareMsg(StringactivityTitle,StringmsgTitle,StringmsgText,
StringimgPath){
Intentintent=newIntent(Intent.ACTION_SEND);
if(imgPath==null||imgPath.equals("")){
intent.setType("text/plain");//純文本
}else{
Filef=newFile(imgPath);
if(f!=null&&f.exists()&&f.isFile()){
intent.setType("image/jpg");
Uriu=Uri.fromFile(f);
intent.putExtra(Intent.EXTRA_STREAM,u);
}
}
intent.putExtra(Intent.EXTRA_SUBJECT,msgTitle);
intent.putExtra(Intent.EXTRA_TEXT,msgText);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(intent,activityTitle));
}4. 第三方分享:使用較多的分享->ShareSDK ,鏈接:http://www.mob.com/
㈡ Android集成微信分享功能采坑:分享不成功,一閃而過,無反應等情況
Android 微信分享遇到的問題:
1.APP_ID是否輸入正確
2.官網申請時輸入的簽名和打包的簽名是否一致(請用微信推薦的簽名工具對比)
註:微信平台填寫的簽名是
是apk的keystore的md5去掉冒號,大寫換位小寫字母形式
3.分享一閃而過
有可能的bug:簽名錯誤,appid正確,但是申請的時候吧包名和簽名寫反了
微信緩存問題,重新安裝微信多試幾次
4.請用微信官方提供的簽名獲取工具
5.自己直接run到手機運行的apk包注意簽名應該和申請時用的簽名一致(即把debug的簽名改為release的)
6.分享圖片的縮略圖太大,超過32k
7.換設備,重新嘗試
8.保證所有配置沒有問題的情況下,嘗試重啟手機即可……(我沒有開玩笑)
㈢ android 自帶的分享功能如何實現分享圖片
bgimg0=getImageFromAssetsFile("Cat_Blink/cat_blink0000.png");
/**
*從Assets中讀取圖片
*/
(StringfileName)
{
Bitmapimage=null;
AssetManageram=getResources().getAssets();
try
{
InputStreamis=am.open(fileName);
image=BitmapFactory.decodeStream(is);
is.close();
}
catch(IOExceptione)
{
e.printStackTrace();
}
returnimage;
}
上面的代碼是從assets中獲取圖片的代碼,下面的代碼是分享圖片的代碼:
/**
*分享功能
*
*@paramcontext
*上下文
*@paramactivityTitle
*Activity的名字
*@parammsgTitle
*消息標題
*@parammsgText
*消息內容
*@paramimgPath
*圖片路徑,不分享圖片則傳null
*/
publicvoidshareMsg(StringactivityTitle,StringmsgTitle,StringmsgText,
StringimgPath){
Intentintent=newIntent(Intent.ACTION_SEND);
if(imgPath==null||imgPath.equals("")){
intent.setType("text/plain");//純文本
}else{
Filef=newFile(imgPath);
if(f!=null&&f.exists()&&f.isFile()){
intent.setType("image/jpg");
Uriu=Uri.fromFile(f);
intent.putExtra(Intent.EXTRA_STREAM,u);
}
}
intent.putExtra(Intent.EXTRA_SUBJECT,msgTitle);
intent.putExtra(Intent.EXTRA_TEXT,msgText);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(intent,activityTitle));
}
系統的分享,你想要分享圖片需要先把圖片存到本地才能分享
㈣ 濡備綍鍦ˋndroid涓瀹炵幇鍒嗕韓鍔熻兘
閫氳繃涓嬮潰浠g爜鍙瀹炵幇
publicvoidonClickShare(Viewview){
Intentintent=newIntent(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_SUBJECT,"鍒嗕韓");
intent.putExtra(Intent.EXTRA_TEXT,"緇堜簬鍙浠ヤ簡!!!");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(intent,getTitle()));
}
㈤ android應用實現分享到微博功能
1.Intent intent = new Intent(Intent.ACTION_SEND); //啟動分享發送的屬性
2. intent.setType("text/plain"); //分享發送的數據類型
3. intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); //分享的主題
4. intent.putExtra(Intent.EXTRA_TEXT, "extratext"); //分享的內容
5. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//這個也許是分享列表的背景吧
6. FenxiangActivity.this.startActivity(Intent.createChooser(intent, "分享"));//目標應用選擇對話框的標題
然後在Manifest的Activity下面加上:
1.<intent-filter Android:label="@string/albums_sendbyWBlog">
2. <action Android:name="android.intent.action.SEND" />
3. <data Android:mimeType="image/*" />
4.<category Android:name="android.intent.category.DEFAULT" />
5. </intent-filter>
㈥ 利用 Android 系統原生 API 實現分享功能(2)
在之前的一篇文章 利用 Android 系統原生 API 實現分享功能 中主要說了下實現流程,但具體實施起來其實還是有許多坑要面對。那這篇文章就是提供一個封裝好的 Share2 庫供大家參考。
GitHub 項目地址:Share2
看過上一篇文章的同學應該知道,要調用 Android 系統內建的分享功能,主要有三步流程:
更多相關內容請參考上一篇,這里就不再重復贅述了。
知道大致的實現流程後,其實只要解決下面幾個問題後就可以具體實施了。
這其實是直接決定了最終的實現形態,我們知道常見的使用場景中,只是為了在應用間分享圖片和一些文件,那對於那些只是分享文本的產品而言,兩者實現起來要考慮的問題完全不同。
所以為了解決這個問題,我們可以預先定好支持的分享內容類型,針對不同類型可以進行不同的處理。
在 Share2 中,一共定義了5種類別的分享內容,基本能覆蓋常見的使用場景。在調用分享介面時可以直接指定內容類型,比如像文本、圖片、音視頻、已經其他各種類型文件。
對於不同類別的內容,可能會有不同的來源。比如文本可能就只是一個字元串對象,而對於分享圖片或其他文件,我們需要一個 Uri 來標識一個資源。這其實就引出來具體實施時的一個大問題,如何獲取要分享文件的 Uri,並且這個 Uri 要能被接收分享內容的應用處理才行 。
那麼,如何獲取要分享內容文件的 Uri?如果處理才能讓接收方也能夠根據 Uri 獲取到文件?
我們把文件 Uri 的來源劃分為下面三種類型:
常見場景 :通過文件選擇器獲取一個文件的 Uri
通過這種方式獲取到的 Uri 是由系統 ContentProvider 返回的,在 Android 4.4 之前的版本和之後的版本有較大的區別,我們後面再說怎麼處理。只要先記住這種系統返回給我們的 Uri 就行了。
比如調用系統相機進行拍照或錄制音視頻,要傳入一個生成目標文件的 Uri ,從 7.0 開始我們需要用到 FileProvider 來實現。
如果用到了 FileProvider 就要注意跟系統 ContentProvider 返回 Uri 的區別,比如我們在 Manifest 中對 FileProvider 配置 android:authorities="com.xx.xxx.fileProvider" 屬性,那這時系統返回的 Uri 格式就變成了 : content://com.xx.xxx.fileProvider... ,對於這種類型的 Uri 我們姑且叫 自定義 FileProvider 返回的 Uri ,後面一並說怎麼處理。
我們調用 new File 時需要傳入指定的文件路徑,這個絕對路徑通常是: /storage/emulated/0/... 這種樣式,我們要想調用分享時也要變成 Uri 的形式才可以,那麼如何把文件路徑變成一個文件 Uri ?這個問題下面也一並進行回答。
前面提到了文件 Uri 的三種分類,對應不同類型處理方式也不同,不然你最先遇到的問題就是:
這是由於對系統返回的 Uri 缺失訪問許可權導致,所以要對應用進行臨時訪問 Uri 的授權才行,不然會提示許可權缺失。
對於要分享系統返回的 Uri 我們可以這樣進行處理:
需要注意的是對於自定義 FileProvider 返回 Uri 的處理,即使是設置臨時訪問許可權,但是分享到第三方應用也會無法識別該 Uri
典型的場景就是,我們如果把自定義 FileProvider 的返回的 Uri 設置分享到微信或 QQ 之類的第三方應用,會提示文件不存在,這是因為他們無法識別該 Uri。
關於這個問題的處理其實跟下面要說的把文件路徑變成系統返回的 Uri 一樣,我們只需要把自定義 FileProvider 返回的 Uri 變成第三方應用可以識別系統返回的 Uri 就行了。
創建 FileProvider 時需要傳入一個 File 對象,所以直接可以知道文件路徑,那就把問題都轉換成了: 如何通過文件路徑獲取系統返回的 Uri
下面是根據傳入的 File 對象和類型來查詢系統 ContentProvider 來獲取相應的 Uri,已經按照不同文件類型在不同系統版本下的進行了適配。
其中 forceGetFileUri 方法是通過反射實現的,處理 7.0 以上系統的特殊情況下的兼容性,一般情況下不會調用到。Android 7.0 開始不允許 file:// Uri 的方式在不同的 App 間共享文件,但是如果換成 FileProvider 的方式依然是無效的,我們可以通過反射把該檢測幹掉。
通過 File Path 轉成 Uri 的方式,我們最終統一了調用系統分享時傳入內容 Uri 的三種不同場景,最終全部轉換為傳遞系統返回的 Uri,讓第三方應用能夠正常的獲取到分享內容。
Share2 按照上述方法進行了具體實施,可以通過下面的方式進行集成:
分享圖片到指定界面,比如分享到微信朋友圈
GitHub 項目地址:Share2