zoukankan      html  css  js  c++  java
  • 文件分享功能实现

    对于某些应用,需要为其添加一个“分享”功能菜单,如通过Email或蓝牙分享给别人。
    此时可以直接调用系统内置的服务,而不需要自己实现。

    且看测试程序截图(将一指定文件通过蓝牙或Email分享给别人):


    布局main.xml就一个button,代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button
    android:text="Test Email"
    android:id="@+id/btnEmail"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
    </LinearLayout>

    然后就是程序代码EmailTest.java:

    package com.ucrobotics.emailtest;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
     
    public class EmailTest extends Activity {
     
    private Button btnEmail = null;
     
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
     
    btnEmail = (Button) this.findViewById(R.id.btnEmail);
    btnEmail.setOnClickListener(new ClickEvent());
    }
     
    class ClickEvent implements View.OnClickListener {
    public void onClick(View v) {
    Intent it = new Intent(Intent.ACTION_SEND);
    //it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
     
    //it.putExtra(Intent.EXTRA_STREAM, "[url=]file:///sdcard/sprt.txt[/url]");
    it.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + "/sdcard/test.jpg"));
     
    //it.setType("plain/text");
    it.setType("text/html");
    startActivity(Intent.createChooser(it, "选择分享方式"));
    }
    }
    }

    主要就是调用系统的Intent.ACTION_SEND服务。虽然设置的是"text/html"类型,但发送文件或是图片都是可以的。然后选择不同的客户端就会调用各自的服务进行文件发送操作。

    关于选取不同的intent和type会有如下测试结论:
    Intent.ACTION_SEND + plain/text ---> 列表里仅有Gmail和系统默认Email两个客户端
    Intent.ACTION_SEND + text/html ---> 除了两个email客户端,还有蓝牙客户端
    Intent.ACTION_SEND_MULTIPLE + * ---> 此时会显示两个email客户端和短信服务
    Intent.ACTION_SENDTO + * ---> 没有应用显示

    由于都是调用系统自带的服务,所以无需在manifest.xml里添加权限之类的设置及<activity>声明!

    ================

    还有其它相关的Intent调用:(未测试)
      1,调web浏览器

      uri mybloguri = uri.parse("kuikui.javaeye.com");

      returnit = new intent(intent.action_view, mybloguri);

      2,地图

      uri mapuri = uri.parse("geo:38.899533,-77.036476");

      returnit = new intent(intent.action_view, mapuri);

      3,调拨打电话界面

      uri teluri = uri.parse("tel:100861");

      returnit = new intent(intent.action_dial, teluri);

      4,直接拨打电话

      uri calluri = uri.parse("tel:100861");

      returnit = new intent(intent.action_call, calluri);

      5,卸载

      uri uninstalluri = uri.fromparts("package", "xxx", null);

      returnit = new intent(intent.action_delete, uninstalluri);

      6,安装

      uri installuri = uri.fromparts("package", "xxx", null);

      returnit = new intent(intent.action_package_added, installuri);

      7,播放

      uri playuri = uri.parse("file:///sdcard/download/everything.mp3");

      returnit = new intent(intent.action_view, playuri);

      8,调用发邮件

      uri emailuri = uri.parse("mailto:shenrenkui@gmail.com");

      returnit = new intent(intent.action_sendto, emailuri);

      9,发邮件

      returnit = new intent(intent.action_send);

      string[] tos = { "shenrenkui@gmail.com" };

      string[] ccs = { "shenrenkui@gmail.com" };

      returnit.putextra(intent.extra_email, tos);

      returnit.putextra(intent.extra_cc, ccs);

      returnit.putextra(intent.extra_text, "body");

      returnit.putextra(intent.extra_subject, "subject");

      returnit.settype("message/rfc882");

      intent.createchooser(returnit, "choose email client");

      10,发短信

      uri smsuri = uri.parse("tel:100861");

      returnit = new intent(intent.action_view, smsuri);

      returnit.putextra("sms_body", "shenrenkui");

      returnit.settype("vnd.android-dir/mms-sms");

    还可以参见这里:apps.hi.baidu.com/share/detail/33356980

    测试发现,如果将上面的:

    it.setType("text/html");

    改成:

    it.setType("text/plain");

    就会出现更多的应用选择,如新浪微博,彩信等等。
    但因为测试的是.txt文本文件,微博提示说无法识别的格式。

    但如果将前面的 Intent.EXTRA_STREAM 改成 Intent.EXTRA_TEXT,则邮件客户端选中后没附件了,蓝牙分享也工作的不正常。

  • 相关阅读:
    Sign APK without putting keystore info in build.gradle
    Sign APK without putting keystore info in build.gradle
    Sketch教程
    Sketch教程
    简要分析unity3d中剪不断理还乱的yield
    简要分析unity3d中剪不断理还乱的yield
    iOS开发系列--地图与定位总结
    iOS开发系列--地图与定位总结
    Launch Screen在iOS7/8中的实现
    linux 命令随笔 ls cd pwd mkdir rm mv cp cat nl
  • 原文地址:https://www.cnblogs.com/wzc0066/p/2948336.html
Copyright © 2011-2022 走看看