第六集android使用剪切板传递数据

本文介绍了一种通过Android系统的剪贴板服务在不同Activity间传递自定义对象的方法。具体实现包括将对象序列化为Base64字符串保存到剪贴板,以及从剪贴板读取Base64字符串并反序列化为原始对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MainActivity.java

 1 package com.fxp.intent3;
 2 
 3 import java.io.ByteArrayOutputStream;
 4 import java.io.ObjectOutputStream;
 5 
 6 import android.os.Bundle;
 7 import android.annotation.SuppressLint;
 8 import android.app.Activity;
 9 import android.content.ClipboardManager;
10 import android.content.Context;
11 import android.content.Intent;
12 import android.util.Base64;
13 import android.view.Menu;
14 import android.view.View;
15 import android.widget.Button;
16 import android.widget.TextView;
17 
18 @SuppressLint("NewApi")
19 public class MainActivity extends Activity {
20     private Button goButton;
21     private TextView hiTextView;
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.main);
26         goButton= (Button)this.findViewById(R.id.goButton);
27         goButton.setOnClickListener(new View.OnClickListener() {
28             
29             @Override
30             public void onClick(View v) {
31 /*                ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
32                 String name = "jack";
33                 clipboardManager.setText(name);
34                 Intent intent = new Intent(MainActivity.this,OtherActivity.class);
35                 startActivity(intent);*/
36                 MyData myData = new MyData("jack", 23);
37                 //将对象转换成字符串
38                 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
39                 String base64String = "";
40                 try {
41                     ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
42                     objectOutputStream.writeObject(myData);
43                     base64String = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
44                     objectOutputStream.close();
45                 } catch (Exception e) {
46                     // TODO: handle exception
47                 }
48                 ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
49                 clipboardManager.setText(base64String);
50                 Intent intent = new Intent(MainActivity.this,OtherActivity.class);
51                 startActivity(intent);
52             }
53         });
54     }
55 
56     @Override
57     public boolean onCreateOptionsMenu(Menu menu) {
58         // Inflate the menu; this adds items to the action bar if it is present.
59         getMenuInflater().inflate(R.menu.main, menu);
60         return true;
61     }
62 
63 }
View Code

 

MyData.java

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

 

OtherActivity.java

 1 package com.fxp.intent3;
 2 
 3 import java.io.ByteArrayInputStream;
 4 import java.io.ObjectInputStream;
 5 
 6 import android.os.Bundle;
 7 import android.annotation.SuppressLint;
 8 import android.app.Activity;
 9 import android.content.ClipboardManager;
10 import android.content.Context;
11 import android.content.Intent;
12 import android.util.Base64;
13 import android.view.Menu;
14 import android.view.View;
15 import android.widget.Button;
16 import android.widget.TextView;
17 
18 public class OtherActivity extends Activity {
19     private Button backButton;
20     private TextView msg;
21     @SuppressLint("NewApi")
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.other);
26         msg = (TextView)this.findViewById(R.id.msg);
27         backButton= (Button)this.findViewById(R.id.backButton);
28         ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
29         String msgString = clipboardManager.getText().toString();
30         //msg.setText(msgString);
31         byte[] base64_byte=Base64.decode(msgString, Base64.DEFAULT);
32         ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64_byte);
33         try {
34             ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
35             MyData myData = (MyData)objectInputStream.readObject();
36             msg.setText(myData.toString());
37         } catch (Exception e) {
38             e.printStackTrace();
39         }
40     }
41 
42     @Override
43     public boolean onCreateOptionsMenu(Menu menu) {
44         // Inflate the menu; this adds items to the action bar if it is present.
45         getMenuInflater().inflate(R.menu.main, menu);
46         return true;
47     }
48 
49 }
View Code

 

main.xml

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     tools:context=".MainActivity" >
 7 
 8     <TextView
 9         android:id="@+id/hiTextView"
10         android:layout_width="fill_parent"
11         android:layout_height="wrap_content"
12         android:text="@string/hello_world" />
13 
14     <Button
15         android:id="@+id/goButton"
16         android:layout_width="fill_parent"
17         android:layout_height="wrap_content"
18         android:layout_marginTop="20dp"
19         android:text="使用剪切板传递数据" />
20 
21 </LinearLayout>
View Code

 

other.xml

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     tools:context=".MainActivity" >
 7 
 8     <TextView
 9         android:id="@+id/msg"
10         android:layout_width="fill_parent"
11         android:layout_height="wrap_content"
12         android:text="第二页" />
13 
14     <Button
15         android:id="@+id/backButton"
16         android:layout_width="fill_parent"
17         android:layout_height="wrap_content"
18         android:layout_marginTop="20dp"
19         android:text="使用剪切板传递数据" />
20 
21 </LinearLayout>
View Code

 

AndroidManifest.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.fxp.intent3"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6 
 7     <uses-sdk
 8         android:minSdkVersion="8"
 9         android:maxSdkVersion="16" />
10 
11     <application
12         android:allowBackup="true"
13         android:icon="@drawable/ic_launcher"
14         android:label="@string/app_name"
15         android:theme="@style/AppTheme" >
16         <activity
17             android:name="com.fxp.intent3.MainActivity"
18             android:label="@string/app_name" >
19             <intent-filter>
20                 <action android:name="android.intent.action.MAIN" />
21 
22                 <category android:name="android.intent.category.LAUNCHER" />
23             </intent-filter>
24         </activity>
25         <activity android:name="com.fxp.intent3.OtherActivity" android:label="@string/app_name" ></activity>
26     </application>
27 
28 </manifest>
View Code

 

转载于:https://www.cnblogs.com/peston/p/3384740.html

### Android使用剪切板 API 传递数据Android 开发中,可以通过 `ClipboardManager` 和 `ClipData` 对象实现剪切板功能。以下是详细的说明以及代码示例。 #### 剪切板基本概念 自 Android 3.0 (API Level 11) 起,推荐使用 `ClipData` 来替代旧版的 `setText()` 和 `getText()` 方法[^1]。通过 `ClipData` 可以更加灵活地处理多种类型的数据,并且支持多条目操作。 #### 设置剪切板内容 要向剪切板写入数据,可以创建一个 `ClipData` 实例并将其设置给 `ClipboardManager` 的实例: ```java // 获取系统的 ClipboardManager ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); // 创建一个新的 ClipData.Item 并赋值字符串 ClipData clip = ClipData.newPlainText("label", "这是要复制的内容"); // 将 ClipData 添加到剪切板 clipboard.setPrimaryClip(clip); ``` 上述代码片段展示了如何将一段文本存储至剪切板[^2]。 #### 获取剪切板内容 当需要读取剪切板中的数据时,可以从 `ClipboardManager` 提取 `ClipData` 对象,并进一步解析其内容: ```java // 获取系统的 ClipboardManager ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); if (clipboard.hasPrimaryClip()) { // 如果存在有效剪切板内容,则提取第一个条目的文本 ClipData primaryClip = clipboard.getPrimaryClip(); if (primaryClip != null && primaryClip.getItemCount() > 0) { CharSequence text = primaryClip.getItemAt(0).getText(); // 输出或显示获取到的文本 Log.d("ClipboardContent", "剪切板内容:" + text.toString()); } } ``` 这段代码实现了检查是否有可用的剪切板内容,并从中取出第一条记录作为文本输出的功能。 #### 数据类型的判断 如果希望确认剪切板内的具体 MIME 类型,可调用 `getPrimaryMimeType()` 方法返回对应的字符串表示形式[^4]: ```java String mimeType = clipboard.getPrimaryClipDescription().getPrimaryMimeType(); Log.d("MIMETypeCheck", "当前剪切板的主要 MIME 类型为:" + mimeType); ``` 以上方法可以帮助开发者理解所接收的是何种格式的数据(如纯文本、URL 或图像 URI 等)。 #### 安全性和局限性注意事项 需要注意的是,由于整个设备共享同一份全局剪切板资源,因此可能存在安全性隐患或者竞争条件问题——即某个应用程序可能无意间修改了另一个正在使用剪切板内容[^3]。所以在设计涉及敏感信息的应用场景下应格外小心考虑这些因素的影响。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值