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

推荐订阅源

P
Palo Alto Networks Blog
P
Proofpoint News Feed
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
罗磊的独立博客
J
Java Code Geeks
月光博客
月光博客
F
Full Disclosure
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
U
Unit 42
WordPress大学
WordPress大学
A
About on SuperTechFans
C
Cyber Attacks, Cyber Crime and Cyber Security
SecWiki News
SecWiki News
Security Latest
Security Latest
C
Check Point Blog
C
CERT Recently Published Vulnerability Notes
小众软件
小众软件
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog RSS Feed
V
Visual Studio Blog
博客园_首页
NISL@THU
NISL@THU
I
Intezer
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
The Register - Security
The Register - Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Latest news
Latest news
Project Zero
Project Zero
博客园 - 叶小钗
C
Cybersecurity and Infrastructure Security Agency CISA
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy International News Feed
博客园 - 【当耐特】
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threat Research - Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
T
Tor Project blog
V
Vulnerabilities – Threatpost
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网

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