目前大部分Android App中都具有分享功能冀宴,用戶可以將自己喜歡的文章分享到朋友圈或微博。Android系統(tǒng)本身具有分享功能削茁,但是功能比較簡單,通常無法滿足需求掉房,本文將介紹如何自定義分享功能茧跋。
首先介紹一下如何使用系統(tǒng)自帶的分享功能。
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "喜歡我就點(diǎn)我吧卓囚!");
intent.putExtra(Intent.EXTRA_SUBJECT, "分享一下");
startActivity(Intent.createChooser(intent瘾杭, "分享"));
以上代碼就是常見的分享功能的代碼,你會發(fā)現(xiàn):雖然代碼量小捍岳、實現(xiàn)簡單富寿,但是沒辦法自定義可用程序列表的樣式和順序,以及無法剔除掉我們想屏蔽的程序锣夹∫承欤總之,缺點(diǎn)多多银萍。想要做一個高大上的分享功能变勇,這時候就需要自定義分享功能。
自定義分享功能最核心的代碼就是獲取可用程序列表贴唇,我們可以使用一下代碼來獲炔笮濉:
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);
其中前三行代碼與前面類似,構(gòu)造好shareIntent之后戳气,通過PackageManager的queryIntentActivities方法獲取可用程序列表链患,然后我們就可以根據(jù)自己的需要來設(shè)計我們的分享功能樣式,對可用程序進(jìn)行自定義排序等操作瓶您。
最后重要的一步就是處理用戶選擇某個程序后的操作麻捻。在上一步我們已經(jīng)獲取到一個可用程序列表,也就是一個ResolveInfo的List呀袱,根據(jù)這個List我們就可以拿到用戶選擇的程序的Package Name和Activity Name贸毕,從而構(gòu)造出跳轉(zhuǎn)的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);
其中關(guān)鍵就是需要給Intent添加FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK這兩個Flag夜赵,否則你會發(fā)現(xiàn)點(diǎn)擊后只能跳轉(zhuǎn)到相應(yīng)的應(yīng)用明棍,而無法跳轉(zhuǎn)到對應(yīng)的Activity。
總結(jié)
自定義分享功能最關(guān)鍵的代碼就是獲取可用程序列表以及對用戶選擇后點(diǎn)擊事件處理邏輯寇僧。