Android MenuItem分享

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Intent;
import android.view.ActionProvider;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ShareActionProvider;

public class MainActivity extends Activity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        // 获取菜单项
        MenuItem item = menu.findItem(R.id.action_fuck_share);

        // 获取provider 的对象
        /**
         * ShareActionProvider 分享动作的提供者
         */
        ShareActionProvider provider = (ShareActionProvider) item
                .getActionProvider();

        // 设置分享的意图
        Intent shareIntent = new Intent();
        shareText(provider, shareIntent);

        return true;
    }

    private void shareText(ShareActionProvider provider, Intent shareIntent) {
        // 隐式跳转
        shareIntent.setAction(Intent.ACTION_SEND);
        /**
         * 设置Intent的
         */
        shareIntent.putExtra(Intent.EXTRA_TEXT, "分享的内容");

        shareIntent.setType("text/*");

        provider.setShareIntent(shareIntent);
    }

    private void shareImage(ShareActionProvider provider, Intent shareIntent) {
        // 隐式跳转
        shareIntent.setAction(Intent.ACTION_SEND);
        // 目的: 将assets 的文件,放在sd上面,再分析sd卡的图片,注意:必须要写到sd才能共享出去
        try {
            // 获取Assets下面的img文件,得到一个输入流
            InputStream is = getAssets().open("beijin.jpeg");
            // 判断挂载,和权限
            if (!Environment.getExternalStorageState().equals(
                    Environment.MEDIA_MOUNTED)) {
                return;
            }
            //放在外部存储的根路径下
            File file = new File(Environment.getExternalStorageDirectory()
                    .getAbsolutePath()+File.separator+"img.jpg");
            //不存在就创建一个文件    
            if(!file.exists()){
                file.createNewFile();
            }
            FileOutputStream fos = new FileOutputStream(file);
            
            int len = 0;
            byte[] buff = new byte[1024];
            while((len=is.read(buff))!=-1){
                fos.write(buff, 0, len);
            }
            fos.close();
            is.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //标识符,文件对应着的Uri
        Uri uri = Uri.fromFile(new File(Environment
                .getExternalStorageDirectory()
                .getAbsolutePath()+File.separator+"img.jpg"));
        
        /**
         * 设置Intent的
         */
        shareIntent.putExtra(Intent.EXTRA_STREAM, uri.toString());

        shareIntent.setType("image/*");

        provider.setShareIntent(shareIntent);
    }

}
时间: 2024-10-25 21:06:16

Android MenuItem分享的相关文章

android 实现分享功能两种方法

当我想做一个智能的记事本的时候,我就在尝试自己写一组分享功能.后来才知道,原来每个社交软件中都有自己的分享接口. 这就大大减少了我们的代码量了. 第一种方法:特点--简单 package com.example.share; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuI

Android开发经验分享-GridView、ListView内容错乱

在使用GridView.ListView的过程中遇到内容错乱的问题,费了较长时间才找到问题的根源,特地总结一下. 1.在自定义adapter中没有给每一项都设置内容导致内容错乱: @Override public View getView(final int position, View convertView, ViewGroup parent) { if( null == convertView ){ mGridHolder = new GridHolder( ); convertView

Android APP 分享图片文字到微信刚开始正常,后面就不弹出分享框了

按照官方的流程走了一遍,一切顺利,分享成功了,本来以为可以大功告成了,结果睡了一觉,第二天要给客户演示了,才发现TMD坑爹了,不能分享了,第三方的分享栏弹不出来了,我一阵惊慌,还好很快找到了解决办法:原因是我进行了代码混淆,但是没有对新添加的这部分分享到微信的代码进行处理,所以...解决问题的办法很简单:需要在混淆配置文件proguard.cfg中,增加如下两行代码: -keep class com.tencent.mm.sdk.openapi.WXMediaMessage { *;} -kee

Android社会化分享的实现方法

众所周知,互联网是一个资源共享的地方,在网络上,我们可以分享我们所有认为好的资源.而随着互联网信息爆发式的增长,我们习惯了一键分享功能,比如:微博分享.微信分享.QQ空间分享.人人网分享等等.由此可见分享是很重要的一个客户体验功能,那在移动端,我们怎样实现分享功能呢? 从Android系统的社会分享功能来看,实现手段主要有两种:一种是通过系统自带的来启动分享功能:第二种是通过第三方的SDK插件进行分享:具体实现方式如下. 一.Android系统启动分享功能 系统启动分享功能很简单,实现也很容易,

Android SNS 分享 源码地址

最近学习开放平台,官方文档和Demo有点坑爹,经过几天的努力,写了一个DEMO,整合了新浪微博和腾讯微博,均能够SSO授权.网页授权和发微博,如果需要可以去看看源码,里面有注释说明: DEMO源码地址:https://github.com/cstdr/WeiboSDKDemo 说明一下:虽然已经有很多类似的开放平台DEMO,但这个是我根据最新的SDK所完善的,最新的新浪微博SDK是6天前更新的Github,所以我这个还是有一点点价值的啦- 代码使用自己感觉舒服的方式进行封装和整合,使用前需要修改

Android微信分享功能实例+demo

Android微信分享功能实例 1 微信开放平台注册 2 获得appId,添加到程序中,并运行程序 3 使用应用签名apk生成签名,添加到微信开放平台应用签名,完成注册 4 测试分享功能. 有问题请留言  o(∩_∩)o 哈哈 代码如下: package com.wx; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import a

[Android] [Java] 分享 Process 执行命令行封装类

在上一篇文章中提到,利用Java创建进程执行命令行语句创建过多后会出现无法创建进程的问题. [Android] ProcessBuilder与Runtime.getRuntime().exec分别创建进程的区别 进行多次测试后发现是因为没有正常退出进程,以及完全读取掉流数据,和关闭流导致的问题. 在多次优化后,建立如下封装类: ProcessModel.java import java.io.BufferedReader; import java.io.IOException; import j

Android -- 经验分享

目录                                                                                             代码中安装apk 判断某个apk是否已经安装 取得屏幕大小 获得 LayoutInflater 实例的三种方式 ContentResolver.query(),以及 Activity.managedQuery异同 解锁功能 点亮屏幕 activity全屏显示 屏常亮代码 SQL中 inner join. le

跟Android初学者分享几点经验

刚学Android开发的人肯定想知道过来人是怎样入门的,有哪些经验,怎样能少走弯路.本文就跟大家分享一位Android开发者的入门经验,写的条理很清晰,真正讲出了自己的学习过程,尽管每个人的学习方法和习惯等不同,但也可以从中学到东西. 下面就是他的学习方法分享: 一.看Android开发视频:我刚开始接触android的时候,主要是跟着网上Android开发视频入的门,自己跟着一点一点的敲代码,就这样算是简单的入门,现在在电驴上面有很多的视频资源,记得很多前辈说过类似的话:学技术,有Google