zoukankan      html  css  js  c++  java
  • android利用剪切板来实现数据的传递

    在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 plaincopy
     
    1. Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB  

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

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

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

  • 相关阅读:
    创建nodejs服务器
    研磨设计模式学习笔记2外观模式Facade
    研磨设计模式学习笔记4单例模式Signleton
    研磨设计模式学习笔记1简单工厂(SimpleFactory)
    getResourceAsStream小结
    研磨设计模式学习笔记3适配器模式Adapter
    oracle数据库代码块
    DecimalFormat
    .NET中常用的代码(转载)
    WebClient的研究笔记
  • 原文地址:https://www.cnblogs.com/krislight1105/p/3748349.html
Copyright © 2011-2022 走看看