安卓原生代码的分享

今天给大家带来一个安卓原生代码实现分享功能的一些见解!

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