惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
有赞技术团队
有赞技术团队
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
博客园 - 【当耐特】
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
The Cloudflare Blog
Microsoft Azure Blog
Microsoft Azure Blog
腾讯CDC
Vercel News
Vercel News
IT之家
IT之家
MyScale Blog
MyScale Blog
博客园_首页
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
罗磊的独立博客

博客园 - xin36933

浅析android OCR文字识别 Android中使用代码截图的各种方法总结 Android通过tcpdump抓包 Android 开机自动启动服务 SqlServer表死锁的解决方法 数据库 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。 修改Android工程版本 ANDROID开发之SQLite详解 浅析SQLite数据库开发常用管理工具 android DDMS 连接真机(己ROOT),用file explore看不到data/data文件夹的解决办法 Android手机获取手机唯一识别号(转) android 程序时时获取logcat信息 Android adb shell启动应用程序的方法 android打电话、发短信实现 Android全局变量的定义与使用 安卓4.0/4.1/4.2手机怎么打开USB调试模式 Android中的DDMS进行调试 Runtime.getRuntime().exec执行阻塞问题解决 GC_EXTERNAL_ALLOC freed 与 GC_EXPLICIT freed 是什么?
android利用剪切板来实现数据的传递
xin36933 · 2014-05-19 · via 博客园 - xin36933

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

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

调用服务

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

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

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

1.将值写入剪切板

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

2.读取剪切板的值

  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系统的版本。

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

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

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

  1.   
  2. MyData md = new MyData("kimifdw",26);  
  3.   
  4. String baseToString ="";  
  5.   
  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.读取剪切板的字符串,并将其转换为对象

  1.   
  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中一些流的操作。需要注意的是,无论是读取流还是写入流,在使用完之后,都必须关闭