1、在Activity之间传递数据还可以利用一些技巧,无论是Windows还是Linux操作系统,都支持一种叫做剪切板的技术(某一程序将数据复制到剪切板上,其它的任何程序都可以从剪切板中获取数据);

2、新建一个名为“android_intent3”的Android工程;

3、在main.xml文件中添加Button:

    
4、新建布局文件”other.xml“,添加”TextView“,代码:

<?xml version="1.0" encoding="utf-8"?>        
5、声明一个Activity,”OtherActivity“,并继承Activity,在此类中创建”onCreate“方法;

6、回到“Main.java”中,添加成员Button,并向Android系统调用剪切板,构造意图并启动,代码:

package com.android.myintent;import android.os.Bundle;import android.app.Activity;import android.content.ClipboardManager;import android.content.Context;import android.content.Intent;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.TextView;public class Main extends Activity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) this.findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub// 从Android系统中调用剪切板的服务ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);String name = "Jack";clipboardManager.setText(name);// 向剪切板添加数据Intent intent = new Intent(Main.this, OtherActivity.class);startActivity(intent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
9、点击“OtherActivity.java”,添加获取剪切板方法,获取剪切板数据,设置到“textView”上,代码:

package com.android.myintent;import android.app.Activity;import android.content.ClipboardManager;import android.content.Context;import android.os.Bundle;import android.widget.TextView;public class OtherActivity extends Activity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.other);textView = (TextView) this.findViewById(R.id.msg);ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);String msgString = clipboardManager.getText().toString();//从剪切板中获取数据textView.setText(msgString);}public OtherActivity() {// TODO Auto-generated constructor stub}}
10、在“AndroidManifest.xml”上添加“Activity”:

                
11、运行:



12、点击按钮,居然提示无法运行,后来经过查找,发现是因为在Android11版本之后,原来利用剪切板传递数据使用的setText()和getText()方法被弃用了,只能使用ClipData对象来代替了~下面我们来对上面的程序做出一点改动即可~

第8步中橙色部分的程序替换为:

ClipData clipData = ClipData.newPlainText("Label", "Jack");clipboardManager.setPrimaryClip(clipData);

第9步中橙色部分的程序替换为:

ClipData clipData = clipboardManager.getPrimaryClip();//从剪切板中获取数据Item item = clipData.getItemAt(0);textView.setText(item.getText().toString());
13、如果我们想在剪切板中传递复杂数据,比如一个对象:先建一个类“MyData”,并使其实现“serializable”接口(在Superclass选项里):

14、在新建类中添加成员“name”、“age”并提供构造方法,代码如下:

import java.io.Serializable;public class MyData implements Serializable {private String name;private int age;@Overridepublic String toString() {return "MyData [name=" + name + ", age=" + 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;}}
15、进入“Main.java”,将原来添加的代码注释掉,然后实例化一个MyData对象,代码如下(用到了Base64工具类):

package com.android.myintent;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import android.os.Bundle;import android.app.Activity;import android.content.ClipData;import android.content.ClipData.Item;import android.content.ClipboardManager;import android.content.Context;import android.content.Intent;import android.util.Base64;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.TextView;public class Main extends Activity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) this.findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub// 从Android系统中调用剪切板的服务// ClipboardManager clipboardManager = (ClipboardManager)// getSystemService(Context.CLIPBOARD_SERVICE);// 向剪切板添加数据// ClipData clipData = ClipData.newPlainText("label", "Jack");// clipboardManager.setPrimaryClip(clipData);// Intent intent = new Intent(Main.this, OtherActivity.class);// startActivity(intent);MyData myData = new MyData("Jack", 23);// 将对象转换为字符串ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();String base64String = "";try {// 捕获异常ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);objectOutputStream.writeObject(myData);base64String = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);objectOutputStream.close();} catch (Exception e) {// TODO: handle exception}ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);ClipData clipData = ClipData.newPlainText("label", base64String);clipboardManager.setPrimaryClip(clipData);Intent intent = new Intent(Main.this, OtherActivity.class);startActivity(intent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
16、进入“OtherActivity.java”,修改代码如下:

package com.android.myintent;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;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.content.Context;import android.content.ClipData.Item;import android.os.Bundle;import android.util.Base64;import android.widget.TextView;public class OtherActivity extends Activity {private TextView textView;@SuppressLint("NewApi")@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.other);textView = (TextView) this.findViewById(R.id.msg);ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);ClipData clipData = clipboardManager.getPrimaryClip();// 从剪切板中获取数据Item item = clipData.getItemAt(0);String msgString = item.getText().toString();byte[] base64_byte = Base64.decode(msgString, 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}}public OtherActivity() {// TODO Auto-generated constructor stub}}
Ps:未完待续~

更多相关文章

  1. Android下如何卸载和格式化sdcard
  2. Android(安卓)adb shell相关命令基本使用
  3. android 2.3 StrictMode 使用
  4. 解析Android中的Context
  5. android activity 属性解释
  6. Android(安卓)中的Java跟C/C++的Binder通信
  7. Android(安卓)数据库的简单使用
  8. Android(安卓)调试神器-Stetho(Facebook出品)的使用
  9. mac平台adb、tcpdump捕手android移动网络数据包

随机推荐

  1. Android箭头图标移动动画实现
  2. Activity布局初步(一)
  3. Android,谁动了我的内存(转)
  4. Android高手进阶教程(二十一)之---Androi
  5. (4.1.15)Android 基础教程之-------Android
  6. android 中style的使用
  7. Android(安卓)FileHelper 打开各种类型文
  8. [置顶] Android开发:在onTouchEvent中处理
  9. Android开发之旅:应用程序基础及组件
  10. android配置总结