在Android开发中我们经常要遇到的一个问题就是数据在不同的Activity之间的共享。在Android开发中有很多种方法可以达到这个目地。

这里介绍一种比较常见、又常用的一种方法就是使用剪切板。我们都有用过Window、Linux上的Copy。这里介绍的就是这种。

调用服务

[java] view plaincopy

 
  1. ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);

这里需要注意的是,在android版本11之前,利用剪切板传递数据是使用setText和getText方法,但在版本11以后,这两个getText和set方法就被丢弃了,转而代替的是需要用到ClipData对象来传递数据。相比于getText和setText方法,利用ClipData对象来传递数据,更符合面向对象的编程思维,且所能传递数据的类型也更多。关于ClipData对象的说明,请参阅ClipData对象说明

这里介绍的是利用ClipData传递字符串

1.将值写入剪切板

[java] view plaincopy

 
  1. ClipData cd = ClipData.newPlainText("label", baseToString);
  2. clipboardManager.setPrimaryClip(cd);

2.读取剪切板的值

[java] view plaincopy

 
  1. if(cm.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))
  2. {
  3. ClipData cd = cm.getPrimaryClip();
  4. Item item = cd.getItemAt(0);
  5. txtView.setTextitem.getText().toString());
  6. }

这样就可以利用剪切板来传递数据了。
这里需要说明的是在实际编程中,如真需要利用剪切板来传值,需要在调用服务之前来判断android系统的版本。

[java] view
plain
copy

 
  1. Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB

如需要利用自定义对象来传值。则在利用剪切板时,须对对象进行转换。这里我们需要用到base64这个工具类。关于此类的用法,请参阅Base64类

1.读取自定义对象,并将其转换为字符串,写入剪切板

[java] view
plain
copy

 
  1. //自定义一个对象
  2. MyData md = new MyData("kimifdw",26);
  3. //定义字符串
  4. String baseToString ="";
  5. //1.将对象转换成字符串
  6. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
  7. try
  8. {
  9. ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
  10. objectOutputStream.writeObject(md);
  11. baseToString = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
  12. objectOutputStream.close();
  13. }
  14. catch(Exception e)
  15. {
  16. e.printStackTrace();
  17. }

2.读取剪切板的字符串,并将其转换为对象

[java] view
plain
copy

 
  1. //将base64转换成toString
  2. byte[] base64ToString = Base64.decode(item.getText().toString(), Base64.DEFAULT);
  3. //从流中读取数据
  4. ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64ToString);
  5. try
  6. {
  7. ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
  8. MyData md = (MyData)objectInputStream.readObject();
  9. objectInputStream.close();
  10. txtView.setText(md.toString());
  11. }
  12. catch(Exception e)
  13. {
  14. e.printStackTrace();
  15. }

这里,主要用到了IO中一些流的操作。需要注意的是,无论是读取流还是写入流,在使用完之后,都必须关闭

android利用剪切板来实现数据的传递的更多相关文章

  1. Android 利用剪切板(clipboardManager )实现数据传递

    首先是系统剪切板的调用服务: ClipboardManager ClipboardManager=getSystemService(Context.CLIPBOARD_SERVICE); 然后是写入, ...

  2. Android 使用剪切板传递数据

    使用剪切板传递数据,可以传递简单的数据,也可以传递可序列化的对象. 首先来个简单点吧. 首先在,mainActivity.xml文件中加入一个button按钮 private Button butto ...

  3. Android Studio 之 Navigation【2.数据的传递】

    Android Studio 之 Navigation[2.数据的传递和过渡动画] 在资源navigation资源的xml文件中,在[目标界面] detialFragment中点击,在右边 Argum ...

  4. Android系统剪切板

    Android系统剪贴板 复制字符串到系统剪切板 /** * 复制文本到剪切板 * * @param text * @return */ @SuppressWarnings("depreca ...

  5. iOS利用剪切板在app中传递信息

    利用iOS剪切板在app中传递信息 App1 中添加URLSchemes   app1 App2 中国添加URLSchemes   app2 App1中进入app2: UIApplication.sh ...

  6. asp.net利用剪切板导出excel

    public enum ClipboardFormats : uint { CF_TEXT = 1, CF_BITMAP = 2, CF_METAFILEPICT = 3, CF_SYLK = 4, ...

  7. Android剪切板传递数据传递序列化对象数据

    一.剪切板的使用介绍 1. 剪切板对象的创建 使用剪切板会用到,ClipboardManager对象,这个对像的创建不可以使用构造方法,主要是由于没有提供public的构造函数(单例模式),需要使用A ...

  8. 剪切板 复制文本 ClipboardManager

    代码 public class MainActivity extends ListActivity {     private EditText tv_info;     private Clipbo ...

  9. Android--使用剪切板在Activity中传值

    在Activity之间传递数据还可以利用一些技巧,不管windows还是Linux操作系统,都会支持一种叫剪切板的技术,也就是某一个程序将一些数据复制到剪切板上,然后其他的任何程序都可以从剪切板中获取 ...

随机推荐

  1. 将分页功能从JSP页面中独立出来

    附带视频链接:http://www.tudou.com/programs/view/leaQ-YFl7W8/?bid=03&pid=2&resourceId=0_03_05_02

  2. 关于ibatis进行物理游标分页

    http://www.iteye.com/topic/136712 详细demo:参照http://www.kusoft.net 我的数据库是采用mssql2000 采用分页必定数据量比较大: 按照i ...

  3. ASP和PHP限制IP访问 只允许指定IP访问 允许*号通配符过滤IP

    /** * 检测访问的ip是否为规定的允许的ip * Enter description here ... */ function check_ip(){ $ALLOWED_IP=array('192 ...

  4. 如何关闭SELinux

    一般安装linux课程时都把SELinux与iptables安排在后面,使初学者配置linux服务器时不成功,却没有头绪,那是因为在RedHat linux操作系统中默认开启了防火墙,SELinux也 ...

  5. ASP.NET MVC5总结(二)@HTML扩展

    1.@Html.AntiForgeryToken() 用来防止跨站请求伪造(CSRF)攻击的一个措施 2.@Html.ValidationSummary(true) 主要用来 (1). 显示后台 Mo ...

  6. sublimeText3中 less2css error: `lessc` is not available的解决办法

    昨天在sublimeText3中安装了less 以及 less2css插件,但是在编译保存的时候总是出现错误: less2css error: `lessc` is not available 就go ...

  7. IntelliJ IDEA14 和 Maven 系列:使用IntelliJ IDEA 14和Maven 7 创建java web项目(一)

    Intellij IDEA作为最好的Java IDE,创建Maven项目还是比较简单的,但是创建一个Maven Web项目还是要修改一些配置的,下面进行总结整理. 1前言 在创建项目中,IDEA提供了 ...

  8. storm学习之入门篇(二)

    Strom的简单实现 Spout的实现 对文件的改变进行分开的监听,并监视目录下有无新日志文件添加. 在数据得到了字段的说明后,将其转换成tuple. 声明Spout和Bolt之间的分组,并决定tup ...

  9. EF 存储过程(下)

    本节,我们将学习如何手动添加/修改存储过程,如何使EF能够支持Output类型的参数 > 添加/修改存储过程 有时候,某个SQL语句比较复杂,但是数据库中又没有定义相应的存储过程.这个时候,我们 ...

  10. 01_C语言基础

    内容提要: 1. C语言概述2. 数据类型.运算符与表达式3. C语言程序结构 4. VC6.0使用练习 知识详解01:C语言的历史 1. C语言与其它语言比较 汇编语言: (1).可直接对硬件进行操 ...