安卓原生代码的分享
今天给大家带来一个安卓原生代码实现分享功能的一些见解!
在我们开发项目的时候经常会出现需求,就是实现分享到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里面的一个功能实现列表式的分享功能!还有多选单选分享,我将在下个文章继续给大家详解!有讲的不对,或者感觉我代码有问题的请大家能够指正,我会去更改,把更好的献给大家,我会不断的去努力去学习!