iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android使用剪切板传递数据
  • 478
分享到

Android使用剪切板传递数据

数据Android 2022-06-06 14:06:32 478人浏览 薄情痞子
摘要

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

在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")); // 或分2步写 ClipData cd = ClipData.newPlain("label","Jack");cm.setPrimaryClip(cd);
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设备上任何应用都可以访问的到,但是正是因为此设备访问的都是同一个剪切板,可能会导致当前程序存入的数据,在使用前被其他程序覆盖掉了,导致无法保证正确获取数据。

您可能感兴趣的文章:android利用剪切板传递数据Android学习笔记--使用剪切板在Activity中传值示例代码


--结束END--

本文标题: Android使用剪切板传递数据

本文链接: https://www.lsjlt.com/news/29845.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • win10剪切板数据如何清除
    这篇文章主要讲解了“win10剪切板数据如何清除”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“win10剪切板数据如何清除”吧!按“Windows+I”键,打开“Windows设置”,点击“...
    99+
    2023-07-01
  • Android使用Intent传递组件大数据
    目录数据传输替代方案数据传输 在Android开发过程中,我们常常通过Intent在各个组件之间传递数据。例如在使用startActivity(android.content.Int...
    99+
    2024-04-02
  • Android如何监控App使用剪切板权限的行为?
    要使用Android Studio监控剪贴板权限记录,你可以按照以下步骤进行操作: 创建一个新的Android项目: 打开Android Studio并创建一个新的Android项目。选择适当的项目名称、包名和其他配置选项。 添加剪贴板...
    99+
    2023-09-04
    android
  • Android中怎么使用Activity和Fragment传递数据
    Android中怎么使用Activity和Fragment传递数据,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。第一种方式,也是最常用的方式,就是使用Bundle来传递参数&n...
    99+
    2023-05-30
    fragment activity android
  • js剪切板Clipboard.js 使用方法是什么
    本篇文章为大家展示了js剪切板Clipboard.js 使用方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。js剪切板Clipboard.js clipboard.js是一个用来设...
    99+
    2023-06-04
  • 怎么使用Android registerForActivityResult实现两个Activity间数据传递
    这篇文章主要介绍“怎么使用Android registerForActivityResult实现两个Activity间数据传递”,在日常操作中,相信很多人在怎么使用Android registerForActivityR...
    99+
    2023-07-05
  • Android项目中如何利用Intent传递数据
    Android项目中如何利用Intent传递数据?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Intent是什么public class Intent implements...
    99+
    2023-05-31
    android intent roi
  • 怎么使用POST方法传递数据
    本篇内容介绍了“怎么使用POST方法传递数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用POST方法传递数据使用POST方法向服务器传...
    99+
    2023-06-08
  • 如何使用Python通过获取剪切板数据实现百度划词搜索功能
    小编给大家分享一下如何使用Python通过获取剪切板数据实现百度划词搜索功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、实现划词功能说是划词翻译,实际上我们...
    99+
    2023-06-15
  • android使用intent传递参数实现乘法计算
    本文实例为大家分享了android使用intent传递参数实现乘法计算的具体代码,供大家参考,具体内容如下 主界面上是两个EditText和一个按钮。用于输入两个数字参数。 calc...
    99+
    2024-04-02
  • Android registerForActivityResult新用法实现两个Activity间数据传递
    目录前言startActivityForResult用法Activity Results API介绍registerForActivityResult()常规用法前言 今天在做项目...
    99+
    2023-05-14
    Android registerForActivityResult Activity间数据传递
  • android界面是如何进行数据传递的
    android界面是如何进行数据传递的?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。主界面:package com.yy.activity.value;import and...
    99+
    2023-05-31
    android roi %d
  • 使用Flutter怎么对数据进行传递
    这期内容当中小编将会给大家带来有关使用Flutter怎么对数据进行传递,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Flutter 中的数据传递在开发中,数据从一个页面传递到另一个页面事很常用的,在And...
    99+
    2023-06-14
  • 使用Postman传递arraylist数据给springboot方式
    目录使用Postman传递arraylist数据给springboot首先确定你的请求方式是什么后端接收的方法Postman传递arraylist参数给springboot的cont...
    99+
    2024-04-02
  • 利用Python通过获取剪切板数据实现百度划词搜索功能
    目录一、实现划词功能二、运行错误三、解决问题一、实现划词功能 说是划词翻译,实际上我们是通过获取用户的剪切板内容,通过一系列的操作得到的。首先呢,我们就先实现如何获取剪切板内容的程序...
    99+
    2024-04-02
  • Android怎么使用Intent传大数据
    这篇“Android怎么使用Intent传大数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android怎么使用Inte...
    99+
    2023-07-05
  • Android应用中怎么实现Activity之间的数据传递
    本篇文章为大家展示了Android应用中怎么实现Activity之间的数据传递,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。MainActivitypublic class MainActivity...
    99+
    2023-05-31
    android roi activity
  • Flask如何使用全局变量传递数据
    这篇“Flask如何使用全局变量传递数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Fl...
    99+
    2024-04-02
  • Android跨进程传递大数据的方法实现
    最近要从Service端给Client端传递图片数据,之前的数据都是通过aidl传递: 创建 Parcelable文件 ImageData.java public clas...
    99+
    2024-04-02
  • 在Android中怎么实现与Activity的数据传递
    在Android中怎么实现与Activity的数据传递?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用Inten的putExtra传递第一个Activity中//创建意图对象...
    99+
    2023-05-31
    activity android roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作