1. 程式人生 > >安卓原生分享的一些用法和講解!

安卓原生分享的一些用法和講解!

安卓原生程式碼的分享

今天給大家帶來一個安卓原生程式碼實現分享功能的一些見解!

     在我們開發專案的時候經常會出現需求,就是實現分享到QQ,微信,微博以及。。。。。。。。。。很多很多平臺。

這時就出現很尷尬的問題就是我們要下很多jar包匯入專案中,而且有些平臺實現分享的功能的程式碼很繁瑣,這就很頭疼了!其實在安卓中它有原生自帶的分享功能,而且很簡單幾行程式碼搞定這是多麼爽的一件事,不用再為要下一大堆jar包而頭疼,不用跟著官方的API去一步一步看該怎麼實現分享解決了很多問題!太簡單了!

原生的優勢:簡單,直接,它系統會呼叫你那些軟體具備分享功能,沒有多餘的jar包和依賴,不需要申請appkey

劣勢:如果沒有安裝需要分享的指定的app,則無法分享,介面風格不統一,根據系統版本來定!

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第三方SDK優勢:介面統一,支援網頁,APP的直接分享,分享的型別比較多,

劣勢:第三方要下大量的依賴庫和jar包,申請繁瑣appkey,經常更新版本,相容性和穩定性不好

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

這就是他們之間的好處和壞處和差異,也是根據我專案需求的原因所以,我個人傾向於呼叫系統的,簡單,直接!

好,那我們現在講講安卓自帶的原生它的程式碼該怎麼實現了:

1.我們先建立一個意圖事件

Intent share_intent = new Intent();

2,然後我們設定裡面的Action方法,呼叫裡面的一個分享行為,Intent.ACTION_SEND

       share_intent.setAction(Intent.ACTION_SEND);//設定分享行為

3,然後你可以設定你分享的內容型別,如“”/“”是支援所有型別,“”imge“”圖片型別,“”text/plain“”txt檔案型別

share_intent.setType("text/plain");//設定分享內容的型別

4,新增分享內容的標題

       share_intent.putExtra(Intent.EXTRA_SUBJECT, contentTitle);

5,新增分享的內容

       share_intent.putExtra(Intent.EXTRA_TEXT, content);

6,新增分享的dalog

       share_intent = Intent.createChooser(share_intent, dialogTitle);

       activity.startActivity(share_intent);

以上幾行程式碼就是安卓原生自帶的分享功能的程式碼,是不是感覺特別簡單。

你那裡需要實現你直接在你要實現的點選事件裡面一寫,OK!這個功能就完成!也可以玩出各種各樣的效果,比如我以列表形式顯示出來所有檔案,我可以想分享那個我點那個分享,我直接粘程式碼了:
public class FileActivity extends Activity {

    private ListView mFileListv;
    private TextView mFileTv;
    private String FilePath;   //sdcard 根路徑
    private FileAdapter adapter;
    private String mLastFilePath;    //當前顯示的路徑
    private ArrayList<FileInfo> mFileLists;
    private String currentTime;
    private RenWuXQBean.DataBean mDataBean;
    private boolean isHave = false;//資料庫是否有當前選擇的這一條,預設是username+taskid一樣就是同一條資料

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.file_activity);
        mFileListv = (ListView) findViewById(R.id.flie_lv);
        mFileTv = (TextView) findViewById(R.id.flie_tv);
        FilePath = getSDPath() + "/Attibutes File";
        mLastFilePath = FilePath;
        setListViewAdapter(FilePath);
        mFileListv.setOnItemClickListener(mItemClickListener);
    }

    public String getSDPath() {
        File sdDir = null;
        boolean sdCardExist = Environment.getExternalStorageState()
                .equals(Environment.MEDIA_MOUNTED); //判斷sd卡是否存在
        if (sdCardExist) {
            sdDir = Environment.getExternalStorageDirectory();//獲取跟目錄
        }
        return sdDir.toString();
    }

    private void setListViewAdapter(String filePath) {
        updateFileItems(filePath);
        adapter = new FileAdapter(this, mFileLists);
        mFileListv.setAdapter(adapter);
    }

    private void updateFileItems(String filePath) {
        mLastFilePath = filePath;
        mFileTv.setText("選擇匯入檔案路徑:" + mLastFilePath);
        if (mFileLists == null)
            mFileLists = new ArrayList<FileInfo>();
        LogUtil.e("mFileLists" + mFileLists);
        if (!mFileLists.isEmpty())
            mFileLists.clear();

        File[] files = folderScan(filePath);
        if (files == null)
            return;
        for (int i = 0; i < files.length; i++) {
            if (files[i].isHidden())  // 不顯示隱藏檔案
                continue;

            String fileAbsolutePath = files[i].getAbsolutePath();
            String fileName = files[i].getName();
            boolean isDirectory = false;
            if (files[i].isDirectory()) {
                isDirectory = true;
            }
            boolean isFile = false;
            if (files[i].isFile()) {
                isFile = true;
            }
            FileInfo fileInfo = new FileInfo(fileAbsolutePath, fileName, isDirectory, isFile);
            if (!fileInfo.isTargetFile() && !fileInfo.isDirectory()) {
                continue;
            }
            //新增至列表
            mFileLists.add(fileInfo);
        }
        //When first enter , the object of mAdatper don't initialized
        if (adapter != null)
            adapter.notifyDataSetChanged();  //重新重新整理
    }

    private AdapterView.OnItemClickListener mItemClickListener = new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> adapterView, View view, int position,
                                long id) {
            FileInfo fileInfo = (FileInfo) (((FileAdapter) adapterView.getAdapter()).getItem(position));
            if (fileInfo.isDirectory()) { //點選項為資料夾, 顯示該資料夾下所有檔案
                updateFileItems(fileInfo.getFilePath());
            } else if (fileInfo.isFile()) {
                if (fileInfo.isTargetFile()) {//如果點選的是。txt檔案就進行檔案內容讀取,跳轉到下個介面
                       String path = fileInfo.getFilePath();
                    File mFile = new File(path);
                    Intent share_intent = new Intent();
                    share_intent.setAction(Intent.ACTION_SEND);//設定分享行為
                    share_intent.setType("text/plain");//設定分享內容的型別
                    share_intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(mFile));
                    startActivity(Intent.createChooser(share_intent,"分享到"));

                }
            }
        }
    };

    //獲得當前路徑的所有檔案
    private File[] folderScan(String path) {
        File file = new File(path);
        File[] files = file.listFiles();
        return files;
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode()
                == KeyEvent.KEYCODE_BACK) {
            backProcess();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    //返回上一層目錄的操作
    public void backProcess() {
        //判斷當前路徑是不是sdcard路徑 , 如果不是,則返回到上一層。
        if (!mLastFilePath.equals(FilePath)) {
            File thisFile = new File(mLastFilePath);
            String parentFilePath = thisFile.getParent();
            updateFileItems(parentFilePath);
        } else {   //是sdcard路徑 ,直接結束
            setResult(RESULT_CANCELED);
            finish();
        }
    }
}

上面程式碼就是我自己寫的一個小Dome裡面的一個功能實現列表式的分享功能!還有多選單選分享,我將在下個文章繼續給大家詳解!有講的不對,或者感覺我程式碼有問題的請大家能夠指正,我會去更改,把更好的獻給大家,我會不斷的去努力去學習!

                                                                                                                                                                                                                                                   謝謝大家!!