安卓原生分享的一些用法和講解!
安卓原生程式碼的分享
今天給大家帶來一個安卓原生程式碼實現分享功能的一些見解!
在我們開發專案的時候經常會出現需求,就是實現分享到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裡面的一個功能實現列表式的分享功能!還有多選單選分享,我將在下個文章繼續給大家詳解!有講的不對,或者感覺我程式碼有問題的請大家能夠指正,我會去更改,把更好的獻給大家,我會不斷的去努力去學習!
謝謝大家!!