如何用剪切板实现数据传递(本文分字符串和对象)

来源:互联网 发布:南京大汉网络做什么 编辑:程序博客网 时间:2024/05/18 03:40

上次的文章提到的用全局变量来实现对数据的传递,而这次采用的是剪切板来实现对数据的传递

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

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

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

剪切纯粹的字符串,具体代码

MainActivity.java

<span style="font-size:14px;">package net.csdn.blog;import android.annotation.SuppressLint;import android.app.Activity;import android.content.ClipData;import android.content.ClipboardManager;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends Activity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@SuppressLint("NewApi")//代码高级优化,自带,自动改错时可选择忽略@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubClipboardManager clickManager = (ClipboardManager)                                   getSystemService(Context.CLIPBOARD_SERVICE);//</span><span style="font-size:14px;">获取剪切板                                String name = "Jack";clickManager.setPrimaryClip(ClipData.newPlainText("data", name));                                //直接通过ClipboardManager对象中的setPrimaryClip(ClipData clip)来设置数据类</span><pre name="code" class="java"><pre name="code" class="java"><span style="font-size:14px;">                                //ClipData.newPlainText("data", name)设置用于初始化数据的内容</span>

//intent的声明和启动意图
Intent intent = new Intent(MainActivity.this,OtherActivity.class);startActivity(intent);}});}}
OtherActivity.java
<span style="font-size:14px;">package net.csdn.blog;import android.annotation.SuppressLint;import android.app.Activity;import android.content.ClipData;import android.content.ClipboardManager;import android.os.Bundle;import android.widget.TextView;public class OtherActivity extends Activity {private String content;private TextView textView;@SuppressLint("NewApi")@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.other);ClipboardManager clipManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);ClipData clipData =clipManager.getPrimaryClip();content = clipData.getItemAt(0).getText().toString();textView = (TextView) findViewById(R.id.msg);textView.setText(content);}}</span>
main.xml

<span style="font-size:14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="${relativePackage}.${activityClass}" >    <Button        android:id="@+id/button"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/button_name" /></RelativeLayout></span>
other.xml

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <TextView        android:id="@+id/msg"        android:layout_width="fill_parent"        android:layout_height="fill_parent" >    </TextView></LinearLayout></span>
AndroidManifest需要添加

<span style="font-size:14px;">                <activity            android:name=".OtherActivity"            ></activity></span>

剪切对象,具体代码

MainActivity.java

package net.csdn.blog;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInput;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import android.annotation.SuppressLint;import android.app.Activity;import android.content.ClipData;import android.content.ClipboardManager;import android.os.Bundle;import android.util.Base64;import android.widget.TextView;public class OtherActivity extends Activity {private String content;private TextView textView;@SuppressLint("NewApi")@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.other);ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);ClipData clipData =clipboardManager.getPrimaryClip();content = clipData.getItemAt(0).getText().toString();textView =(TextView) findViewById(R.id.msg);byte [] base64_byte=Base64.decode(content, Base64.DEFAULT);ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64_byte);try {ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);MyData myData = (MyData) objectInputStream.readObject();textView.setText(myData.toString());} catch (Exception e) {// TODO: handle exception}}}

OtherActivity.java

package net.csdn.blog;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInput;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import android.annotation.SuppressLint;import android.app.Activity;import android.content.ClipData;import android.content.ClipboardManager;import android.os.Bundle;import android.util.Base64;import android.widget.TextView;public class OtherActivity extends Activity {private String content;private TextView textView;@SuppressLint("NewApi")@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.other);ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);ClipData clipData =clipboardManager.getPrimaryClip();content = clipData.getItemAt(0).getText().toString();textView =(TextView) findViewById(R.id.msg);byte [] base64_byte=Base64.decode(content, Base64.DEFAULT);ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64_byte);try {ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);MyData myData = (MyData) objectInputStream.readObject();textView.setText(myData.toString());} catch (Exception e) {// TODO: handle exception}}}


MyData.java

package net.csdn.blog;import java.io.Serializable;public class MyData implements Serializable {private String name;private String age;public MyData(String name, String age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "MyData [name=" + name + ", age=" + age + "]";}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}}


main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="${relativePackage}.${activityClass}" >    <Button        android:id="@+id/button"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/msg" /></RelativeLayout>


other.xml

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <TextView        android:id="@+id/msg"        android:layout_width="fill_parent"        android:layout_height="fill_parent" >    </TextView></LinearLayout></span>

AndroidManifest需要添加

<span style="font-size:14px;">                <activity            android:name=".OtherActivity"            ></activity></span>





0 0
原创粉丝点击