探索Android調用系統(tǒng)的分享功能

很多的應用為了應用的推廣和傳播都會使用“分享”的功能芍耘,點擊分享按鈕开镣,就能將想要分享的內(nèi)容或者圖片分享至QQ空間哗咆、微博、微信朋友圈等實現(xiàn)了分享功能的應用猾担。這篇文章主要是為了學習與探索調用系統(tǒng)實現(xiàn)分享功能或者直接調起實現(xiàn)了分享功能的應用的activity來進行分享袭灯。

目前實現(xiàn)一鍵分享功能的方式有兩種:
1.需要集成第三方官方SDK包,在獲得官方授權后調用其API來完成一鍵分享功能绑嘹,例如使用友盟分享等
優(yōu)點:無縫集成稽荧,功能多
缺點:需要集成官方的SDK包并通過申請官方的授權才可進行開發(fā)
2.不需要使用任何第三方SDK包,可以直接調起實現(xiàn)了分享功能的應用的activity來進行分享
優(yōu)點:不需要使用任何第三方SDK包和申請官方授權
缺點:需要手機安裝你需要分享的應用(這一點非常重要工腋,一開始測試的時候一直不成功姨丈,提示“沒有應用可執(zhí)行此操作”畅卓,后來找了很久才發(fā)現(xiàn)是我手機沒有安裝相對應的應用,這也是不好方便的地方)

按照慣例先來看一下最終效果圖:


ShareActivity.class

package com.xiaolijuan.sharedome;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.RelativeLayout;

import java.io.File;
import java.util.ArrayList;

/**
 * 項目名稱:ShareDome
 * 類描述:
 * 創(chuàng)建人:xiaolijuan
 * 創(chuàng)建時間:2016/1/13 23:48
 */
public class ShareActivity extends Activity implements View.OnClickListener {
    private RelativeLayout mRlShareText, mRlShareSingleimage, mRlShareMultipleimage, mRlShareQQ, mRlShareTencent, mRlShareWechat, mRlShareMicroblog, mRlShareOther;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_share);
        bindView();
    }

    private void bindView() {
        mRlShareText = (RelativeLayout) findViewById(R.id.rl_share_text);
        mRlShareSingleimage = (RelativeLayout) findViewById(R.id.rl_share_singleimage);
        mRlShareMultipleimage = (RelativeLayout) findViewById(R.id.rl_share_multipleimage);

        mRlShareQQ = (RelativeLayout) findViewById(R.id.rl_share_qq);
        mRlShareTencent = (RelativeLayout) findViewById(R.id.rl_share_qqtencent);
        mRlShareWechat = (RelativeLayout) findViewById(R.id.rl_share_wechat);
        mRlShareMicroblog = (RelativeLayout) findViewById(R.id.rl_share_microblog);
        mRlShareOther = (RelativeLayout) findViewById(R.id.rl_share_other);

        mRlShareText.setOnClickListener(new ShareText());
        mRlShareSingleimage.setOnClickListener(new ShareSingleImage());
        mRlShareMultipleimage.setOnClickListener(new ShareMultipleImage());
        mRlShareQQ.setOnClickListener(this);
        mRlShareTencent.setOnClickListener(this);
        mRlShareWechat.setOnClickListener(this);
        mRlShareMicroblog.setOnClickListener(this);
        mRlShareOther.setOnClickListener(this);
    }

    //分享文字至所有第三方軟件
    public class ShareText implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_SEND);
            intent.putExtra(Intent.EXTRA_TEXT, "這里是分享內(nèi)容");
            intent.setType("text/plain");
            //設置分享列表的標題蟋恬,并且每次都顯示分享列表
            startActivity(Intent.createChooser(intent, "分享到"));
        }
    }

    //分享單張圖片至所有第三方軟件
    public class ShareSingleImage implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            String imagePath = Environment.getExternalStorageDirectory() + File.separator + "13e277bb0b9c2e3ab90229463357bf40.jpg";
            //由文件得到uri
            Uri imageUri = Uri.fromFile(new File(imagePath));

            Intent shareIntent = new Intent();
            shareIntent.setAction(Intent.ACTION_SEND);
            shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
            shareIntent.setType("image/*");
            startActivity(Intent.createChooser(shareIntent, "分享到"));
        }
    }

    //分享多張圖片至所有第三方軟件
    public class ShareMultipleImage implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            ArrayList<Uri> uriList = new ArrayList<>();

            String path = Environment.getExternalStorageDirectory() + File.separator;
            uriList.add(Uri.fromFile(new File(path+"13e277bb0b9c2e3ab90229463357bf40.jpg")));
            uriList.add(Uri.fromFile(new File(path+"869895e73ddd710e8a132afb37461bf0.jpg")));
            uriList.add(Uri.fromFile(new File(path+"4753fc4cd47aa1833c70df4c08f4b7fa.jpg")));
            uriList.add(Uri.fromFile(new File(path+"355ee87cf0ff612331a790f31b3ad113.jpg")));
            uriList.add(Uri.fromFile(new File(path+"ce61ad4d44e3099d87040f38faabbf56.jpg")));

            Intent shareIntent = new Intent();
            shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
            shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList);
            shareIntent.setType("image/*");
            startActivity(Intent.createChooser(shareIntent, "分享到"));
        }
    }

    @Override
    public void onClick(View v) {
        String pakName = "";
        Intent intent = new Intent(Intent.ACTION_SEND); // 啟動分享發(fā)送的屬性
        intent.setType("text/plain"); // 分享發(fā)送的數(shù)據(jù)類型
        switch (v.getId()) {
            case R.id.rl_share_qq:
                pakName = "com.qzone";  //qq空間
                break;
            case R.id.rl_share_qqtencent:
                pakName = "com.tencent.WBlog"; //騰訊微博
                break;
            case R.id.rl_share_wechat:
                pakName = "com.tencent.mm";  //微信
                break;
            case R.id.rl_share_microblog:
                pakName = "com.sina.weibo";  //微博
                break;
            case R.id.rl_share_other:
                break;
            default:
                break;
        }
        intent.setPackage(pakName);
        intent.putExtra(Intent.EXTRA_TEXT, "這里是分享內(nèi)容"); // 分享的內(nèi)容
        this.startActivity(Intent.createChooser(intent, ""));// 目標應用選擇對話框的標題;
    }
}

由于分享功能是使用隱式調用Activtiy實現(xiàn)的翁潘,則需在響應的Activity中聲明intent-filter,在對應的activity的xml里加上

<intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

Dome下載

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末歼争,一起剝皮案震驚了整個濱河市拜马,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沐绒,老刑警劉巖俩莽,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乔遮,居然都是意外死亡豹绪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門申眼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞒津,“玉大人,你說我怎么就攤上這事括尸∠矧剑” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵濒翻,是天一觀的道長屁柏。 經(jīng)常有香客問我,道長有送,這世上最難降的妖魔是什么淌喻? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮雀摘,結果婚禮上裸删,老公的妹妹穿的比我還像新娘。我一直安慰自己阵赠,他們只是感情好涯塔,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著清蚀,像睡著了一般匕荸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枷邪,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天榛搔,我揣著相機與錄音,去河邊找鬼。 笑死践惑,一個胖子當著我的面吹牛绑洛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播童本,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼真屯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了穷娱?” 一聲冷哼從身側響起绑蔫,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泵额,沒想到半個月后配深,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡嫁盲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年篓叶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羞秤。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡缸托,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘾蛋,到底是詐尸還是另有隱情俐镐,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布哺哼,位于F島的核電站佩抹,受9級特大地震影響,放射性物質發(fā)生泄漏取董。R本人自食惡果不足惜棍苹,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茵汰。 院中可真熱鬧枢里,春花似錦、人聲如沸经窖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽画侣。三九已至,卻和暖如春堡妒,著一層夾襖步出監(jiān)牢的瞬間配乱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留搬泥,地道東北人桑寨。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像忿檩,于是被迫代替她去往敵國和親尉尾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容