Android剪切板传递数据传递序列化对象数据

一、剪切板的使用介绍

  1. 剪切板对象的创建  

  使用剪切板会用到,ClipboardManager对象,这个对像的创建不可以使用构造方法,主要是由于没有提供public的构造函数(单例模式),需要使用Activity.getSystemService(Context.CLIPBOARD_SERVICE)获取该对象。 
  2. 对象调用的主要方法介绍  

  在Android-11(Android 3.0)版本之前,利用剪切板传递数据使用setText()和getText()方法,但是在此版本之后,这两个方法就被弃用,转而使用传递ClipData对象来代替。相对于getText和setText而言,利用ClipData对象来传递数据,更符合面向对象的思想,而且所能传递的数据类型也多样化了。  
  3. 使用该方法的步骤
  主要步骤: 
    (1) 通过getSystemService获取ClipboardManager对象cm;
    (2) 使用cm.setPrimaryClip()方法设置ClipData数据对象;
    (3) 在新Activity中获取ClipboardManager对象cm;
    (4) 使用cm.getPrimaryClip()方法获取剪切板的ClipData数据对象: cd;
    (5) 通过cd.getItemAt(0)获取到传递进来的数据。 

//------------------------------------废话不多直接上代码,首先给出的是API11以后的剪切板传递数据方法

 1 /*
 2  *使用剪切板传递数据 
 3  */
 4 public class MainActivity extends Activity {
 5 
 6     private Button button;
 7 
 8     @SuppressLint("NewApi")
 9     @Override
10     protected void onCreate(Bundle savedInstanceState) {
11         super.onCreate(savedInstanceState);
12         setContentView(R.layout.activity_main);
13         button = (Button) findViewById(R.id.button);
14         button.setOnClickListener(new View.OnClickListener() {
15             @SuppressLint("NewApi")
16             @Override
17             public void onClick(View v) {
18                 MyData myData = new MyData("java", 23);
19                 // 将对象转换成字符串,
20                 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
21                 String base64String = "";
22 
23                 try {
24                     ObjectOutputStream objectOutputStream = new ObjectOutputStream(
25                             byteArrayOutputStream);
26                     objectOutputStream.writeObject((myData));
27                     // 使用Android工具类Base64
28                     base64String = Base64.encodeToString(
29                             byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
30                     objectOutputStream.close();
31                 } catch (IOException e) {
32                     // TODO Auto-generated catch block
33                     e.printStackTrace();
34                 }
35 
36                 // 使用剪切板在API11以后的版本
37                 ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
38                 cm.setPrimaryClip(ClipData.newPlainText("java", base64String));
39                 Intent intent = new Intent(MainActivity.this,
40                         OtherActivity.class);
41                 startActivity(intent);
42             }
43         });
44     }
45 
46 }

//----------------------------------------

主要步骤: 
创建一个实现了Serializable接口的类MyData。 
存入数据:获取ClipboardManager,并对通过Base64类对MyData对象进行序列化,再存入剪切板中。 
取出数据:在新Activity中,获取ClipboardManager,对被序列化的数据进行反序列化,同样使用Base64类。然后对反序列化的数据进行处理。 

 1 import java.io.Serializable;
 2 
 3 public class MyData implements Serializable {
 4     private String name;
 5     private int age;
 6 
 7     public MyData(String name, int age) {
 8         super();
 9         this.name = name;
10         this.age = age;
11     }
12 
13     public String getName() {
14         return name;
15     }
16 
17     public void setName(String name) {
18         this.name = name;
19     }
20 
21     public int getAge() {
22         return age;
23     }
24 
25     public void setAge(int age) {
26         this.age = age;
27     }
28 
29     @Override
30     public String toString() {
31         return "MyData [name=" + name + ", age=" + age + "]";
32     }
33 
34 }

//-----------------------------

//目的地activity,

 1 @SuppressLint("NewApi")
 2 public class OtherActivity extends Activity {
 3 
 4     private TextView textView;
 5 
 6     @SuppressLint("NewApi")
 7     @Override
 8     protected void onCreate(Bundle savedInstanceState) {
 9         // TODO Auto-generated method stub
10         super.onCreate(savedInstanceState);
11         setContentView(R.layout.other);
12         textView = (TextView) findViewById(R.id.msg);
13         // 获取剪切板对象
14         ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
15         ClipData clipData = cm.getPrimaryClip();
16         // getItemAt()方法获取clipData对象中的Item,然后通过Item的getText()方法获取里面的数据。
17         String msg = clipData.getItemAt(0).getText().toString();
18         // 有了数据之后通过反序列化将数据变为对象显示出来即可
19         byte[] base64_btye = Base64.decode(msg, Base64.DEFAULT);
20         ByteArrayInputStream bais = new ByteArrayInputStream(base64_btye);
21         try {
22             ObjectInputStream ois = new ObjectInputStream(bais);
23             MyData myData = (MyData) ois.readObject();
24             textView.setText(myData.toString());
25         } catch (Exception e) {
26             // TODO Auto-generated catch block
27             e.printStackTrace();
28         }
29 
30     }
31 }

//=============================

//下面在贴出来一个以前版本的剪切板数据传递,使用的仍然是上面的MyData类

 1 /*
 2  *使用剪切板传递数据 
 3  */
 4 public class MainActivity extends Activity {
 5 
 6     private Button button;
 7 
 8     @Override
 9     protected void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11         setContentView(R.layout.activity_main);
12         button = (Button) findViewById(R.id.button);
13         button.setOnClickListener(new View.OnClickListener() {
14             @Override
15             public void onClick(View v) {
16                 MyData myData = new MyData("java", 23);
17                 // 将对象转换成字符串
18                 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
19                 String base64String = "";
20 
21                 try {
22                     ObjectOutputStream objectOutputStream = new ObjectOutputStream(
23                             byteArrayOutputStream);
24                     objectOutputStream.writeObject((myData));
25                     // 使用Android工具类Base64
26                     base64String = Base64.encodeToString(
27                             byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
28                     objectOutputStream.close();
29                 } catch (IOException e) {
30                     // TODO Auto-generated catch block
31                     e.printStackTrace();
32                 }
33 
34                 // 使用剪切板
35                 ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
36                 clipboardManager.setText(base64String);
37                 Intent intent = new Intent(MainActivity.this,OtherActivity.class);
38                 startActivity(intent);
39             }
40         });
41     }
42 
43 }

//----------------------------

 1 public class OtherActivity extends Activity {
 2 
 3     private TextView textView;
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         // TODO Auto-generated method stub
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.other);
10         textView = (TextView) findViewById(R.id.msg);
11         // 获取剪切板对象
12         ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
13         String name = clipboardManager.getText().toString();
14         // 将得到的数据还原为字节数组
15         byte[] base64_byte = Base64.decode(name, Base64.DEFAULT);
16         ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
17                 base64_byte);
18         try {
19             ObjectInputStream objectInputStream = new ObjectInputStream(
20                     byteArrayInputStream);
21             MyData myData = (MyData) objectInputStream.readObject();
22             textView.setText(myData.toString());
23         } catch (Exception e) {
24             // TODO Auto-generated catch block
25             e.printStackTrace();
26         }
27 
28 
29     }
30 }

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) findViewById(R.id.msg);// 获取剪切板对象ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);String name = clipboardManager.getText().toString();// 将得到的数据还原为字节数组byte[] base64_byte = Base64.decode(name, 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 Auto-generated catch blocke.printStackTrace();}

}}

原文地址:https://www.cnblogs.com/fuck1/p/5459660.html