自定義分享功能

目前大部分Android App中都具有分享功能,用戶可以將自己喜歡的文章分享到朋友圈或微博。Android系統(tǒng)本身具有分享功能,但是功能比較簡單,通常無法滿足需求,本文將介紹如何自定義分享功能。

首先介紹一下如何使用系統(tǒng)自帶的分享功能。

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "喜歡我就點我吧!");
intent.putExtra(Intent.EXTRA_SUBJECT, "分享一下");
startActivity(Intent.createChooser(intent, "分享"));

以上代碼就是常見的分享功能的代碼,你會發(fā)現(xiàn):雖然代碼量小、實現(xiàn)簡單,但是沒辦法自定義可用程序列表的樣式和順序,以及無法剔除掉我們想屏蔽的程序??傊?,缺點多多。想要做一個高大上的分享功能,這時候就需要自定義分享功能。
自定義分享功能最核心的代碼就是獲取可用程序列表,我們可以使用一下代碼來獲?。?/p>

Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, text);
PackageManager pm = App.getContext().getPackageManager();
final List<ResolveInfo> list = pm.queryIntentActivities(shareIntent, 0);

其中前三行代碼與前面類似,構造好shareIntent之后,通過PackageManager的queryIntentActivities方法獲取可用程序列表,然后我們就可以根據(jù)自己的需要來設計我們的分享功能樣式,對可用程序進行自定義排序等操作。
最后重要的一步就是處理用戶選擇某個程序后的操作。在上一步我們已經獲取到一個可用程序列表,也就是一個ResolveInfo的List,根據(jù)這個List我們就可以拿到用戶選擇的程序的Package Name和Activity Name,從而構造出跳轉的Intent。

ActivityInfo activity = list.get(index).activityInfo;
ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
Intent newIntent = (Intent) shareIntent.clone();
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
newIntent.setComponent(name);
startActivity(newIntent);

其中關鍵就是需要給Intent添加FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK這兩個Flag,否則你會發(fā)現(xiàn)點擊后只能跳轉到相應的應用,而無法跳轉到對應的Activity。

總結

自定義分享功能最關鍵的代碼就是獲取可用程序列表以及對用戶選擇后點擊事件處理邏輯。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容