Android学习笔记--使用剪切板在Activity中传值示例代码

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

使用剪切板会用到,ClipboardManager对象,这个对用剪切板会用到,ClipboardManager象用来操作剪切板,但是没有提供public的构造函数(单例模式),需要使用Activity.getSystemService(Context.CLIPBOARD_SERVICE)获取该对象。

在Android-11(Android 3.0)版本之前,利用剪切板传递数据使用setText()和getText()方法,但是在此版本之后,这两个方法就被弃用,转而使用传递ClipData对象来代替。相对于getText和setText而言,利用ClipData对象来传递数据,更符合面向对象的思想,而且所能传递的数据类型也多样化了。 

主要步骤:

通过getSystemService获取ClipboardManager对象cm。

使用cm.setPrimaryClip()方法设置ClipData数据对象。

在新Activity中获取ClipboardManager对象cm。

使用cm.getPrimaryClip()方法获取剪切板的ClipData数据对象,cd。

通过cd.getItemAt(0)获取到传递进来的数据。

示例代码

保存数据:

复制代码 代码如下:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button btn=(Button)findViewById(R.id.btn);

btn.setOnClickListener(new View.OnClickListener() {

@SuppressLint("NewApi")

@Override

public void onClick(View v) {

//获取剪切板

ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

cm.setPrimaryClip(ClipData.newPlainText("data", "Jack"));

Intent intent=new Intent(MainActivity.this,otherActivity.class);

startActivity(intent);

}

});

}

读取数据:

复制代码 代码如下:

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.other);

ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

ClipData cd=cm.getPrimaryClip();

String msg=cd.getItemAt(0).getText().toString();

TextView tv=(TextView)findViewById(R.id.msg);

tv.setText(msg);

}

 以上方式使用剪切板传递的为String类型的数据,如果需要传递一个对象,那么被传递的对象必须可序列化,序列化通过实现Serializable接口来标记。

主要步骤:

创建一个实现了Serializable接口的类MyData。

存入数据:获取ClipboardManager,并对通过Base64类对MyData对象进行序列化,再存入剪切板中。

取出数据:在新Activity中,获取ClipboardManager,对被序列化的数据进行反序列化,同样使用Base64类。然后对反序列化的数据进行处理。

示例代码:

步骤一:

复制代码 代码如下:

public class MyData implements Serializable {

private String name;

private int age;

public MyData(String name, int age) {

super();

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

步骤二:

复制代码 代码如下:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button btn=(Button)findViewById(R.id.btn);

btn.setOnClickListener(new View.OnClickListener() {

@SuppressLint("NewApi")

@Override

public void onClick(View v) {

//获取剪切板

ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

MyData mydata=new MyData("jack", 24);

String baseToString="";

ByteArrayOutputStream bArr=new ByteArrayOutputStream();

try

{

ObjectOutputStream oos=new ObjectOutputStream(bArr);

oos.writeObject(mydata);

baseToString=Base64.encodeToString(bArr.toByteArray(), Base64.DEFAULT);

oos.close();

}

catch (Exception e)

{

e.printStackTrace();

}

cm.setPrimaryClip(ClipData.newPlainText("data",baseToString));

Intent intent=new Intent(MainActivity.this,otherActivity.class);

startActivity(intent);

}

});

}

步骤三:

复制代码 代码如下:

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.other);

ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

ClipData cd=cm.getPrimaryClip();

String msg=cd.getItemAt(0).getText().toString();

byte[] base64_btye=Base64.decode(msg, Base64.DEFAULT);

ByteArrayInputStream bais=new ByteArrayInputStream(base64_btye);

try {

ObjectInputStream ois=new ObjectInputStream(bais);

MyData mydata=(MyData)ois.readObject();

TextView tv=(TextView)findViewById(R.id.msg);

tv.setText(mydata.toString());

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

总结

综上所述,使用剪切板传递数据有利有弊,剪切板为Android系统管理的,所以在一个地方存入的数据,在这个Android设备上任何应用都可以访问的到,但是正是因为此设备访问的都是同一个剪切板,可能会导致当前程序存入的数据,在使用前被其他程序覆盖掉了,导致无法保证正确获取数据。

时间: 2024-09-29 15:07:39

Android学习笔记--使用剪切板在Activity中传值示例代码的相关文章

Android学习笔记--使用剪切板在Activity中传值示例代码_Android

在Activity之间传递数据还可以利用一些技巧,不管windows还是Linux操作系统,都会支持一种叫剪切板的技术,也就是某一个程序将一些数据复制到剪切板上,然后其他的任何程序都可以从剪切板中获取数据,在Android系统中也存在此技术. 使用剪切板会用到,ClipboardManager对象,这个对用剪切板会用到,ClipboardManager象用来操作剪切板,但是没有提供public的构造函数(单例模式),需要使用Activity.getSystemService(Context.CL

Android学习笔记——保存数据到SQL数据库中(Saving Data in SQL Databases)

知识点: 1.使用SQL Helper创建数据库            2.数据的增删查改(PRDU:Put.Read.Delete.Update) 背景知识:                  上篇文章学习了保存文件,今天学习的是保存数据到SQL数据库中.相信大家对数据库都不陌生.对于                             大量重复的,有特定结构的             数据的保存,用 SQL数据库 来保存是最理想不过了.             下面将用一个关于联系人的数

Android学习笔记-保存数据到SQL数据库中(Saving Data in SQL Databases)_Android

知识点: 1.使用SQL Helper创建数据库 2.数据的增删查改(PRDU:Put.Read.Delete.Update) 背景知识: 上篇文章学习了android保存文件,今天学习的是保存数据到SQL数据库中.相信大家对数据库都不陌生.对于大量重复的,有特定结构的数据的保存,用 SQL数据库 来保存是最理想不过了. 下面将用一个关于联系人的数据库Demo来具体学习. 具体知识: 1.定义Contract类 在创建SQL数据库之前,要创建Contract类.那什么是Contract类呢? 复

Android学习笔记-保存数据到SQL数据库中(Saving Data in SQL Databases)

知识点: 1.使用SQL Helper创建数据库 2.数据的增删查改(PRDU:Put.Read.Delete.Update) 背景知识: 上篇文章学习了android保存文件,今天学习的是保存数据到SQL数据库中.相信大家对数据库都不陌生.对于大量重复的,有特定结构的数据的保存,用 SQL数据库 来保存是最理想不过了. 下面将用一个关于联系人的数据库Demo来具体学习. 具体知识: 1.定义Contract类 在创建SQL数据库之前,要创建Contract类.那什么是Contract类呢? 复

Android学习笔记--Activity中使用Intent传值示例代码_Android

Intent,又称为意图,是一种运行时绑定机制,它能在程序运行的过程中链接两个不同的组件(Activity.Service.BroadcastReceiver).通过Intent,程序可以向Android表达某种请求或意愿,Android会根据意愿的内容选择适当的组件来请求. 在这些组件之间的通讯中,主要是由Intent协助完成的.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,

Android学习笔记--Activity中使用Intent传值示例代码

Intent,又称为意图,是一种运行时绑定机制,它能在程序运行的过程中链接两个不同的组件(Activity.Service.BroadcastReceiver).通过Intent,程序可以向Android表达某种请求或意愿,Android会根据意愿的内容选择适当的组件来请求. 在这些组件之间的通讯中,主要是由Intent协助完成的.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,

Android学习笔记(二)App工程文件分析_Android

App工程文件分析 关于如何创建一个最简单的Android App请参照链接: < Android学习笔记(一)环境安装及第一个hello world > http://www.jb51.net/article/52593.htm 创建完的工程文件如下图所示,本文对一些主要的文件进行分析. src文件分析 App源文件如图: 打开源文件 MainActivity.java 可看到如下代码: 源码主要功能如下: App源文件目录 package com.example.firstapp; 导入A

Android学习笔记之应用单元测试实例分析_Android

本文实例讲述了Android学习笔记之应用单元测试.分享给大家供大家参考,具体如下: 第一步:在AndroidManifest.xml中加入如下两段代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.pccw" android:versionCode="1" android:versionName="1.0&qu

Android学习笔记之应用单元测试实例分析

本文实例讲述了Android学习笔记之应用单元测试.分享给大家供大家参考,具体如下: 第一步:在AndroidManifest.xml中加入如下两段代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.pccw" android:versionCode="1" android:versionName="1.0&qu