android利用剪切板传递数据

本文主要介绍android应用android系统中剪切板进行数据的传递,首先讲解的是传递简单数据,然后讲解传递对象类型的数据。

所有实例均在android api 15下测试通过,所以先新建一个android应用程序。

- 传递简单类型数据
步骤一:修改主Activity,增加一个按钮,id为button。

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.appintent3.MainActivity" >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="34dp"
        android:text="利用OutPutStream进行传递对象" />

</RelativeLayout>

步骤二:在MainActivity类里面绑定button,以及利用剪切板进行数据传递,代码如下:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,OtherActivity.class);
                ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
                clipboardManager.setText("luzongfeng:17");
                startActivity(intent);
            }
        });


    }

步骤三:新建otherActivity,添加TextView控件,id为textView.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="" />

</LinearLayout>

步骤四:在OtherActivity里面进行textView以及从剪切板中获取数据.

private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        textView=(TextView)this.findViewById(R.id.textView);
        ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
        String myString  = (String)clipboardManager.getText();
        textView.setText(myString);
    }

步骤五:别忘了在清单中进行OtherActivity注册

  <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".OtherActivity"></activity>  
    </application>

以上就是主要实现过程,具体有些类的使用可以参考Android Api。运行结果如下。
这里写图片描述
这里写图片描述

- 传递对象类型数据
传递对象类型数据无需再增加任何控件,只是需要增加一个实体类,便于我们进行数据传输。
步骤一:新建实体类MyData,实现Serializable接口,便于进行字节流的传输。

package com.example.appintent3;

import java.io.Serializable;

public class MyData implements Serializable {

    private String name;
    private int 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;
    }
    public MyData(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

}

步骤二:在MainActivity里面进行对象类型的数据封装以及传输。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,OtherActivity.class);
                MyData myData = new MyData("luzongfeng", 17);
                //将对象转换成字符串
                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 (IOException e) {
                    e.printStackTrace();
                }
                ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
                clipboardManager.setText(base64String);
                startActivity(intent);
            }
        });
    }

步骤四:在OtherActivity类里面进行数据接收及显示。

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        textView=(TextView)this.findViewById(R.id.textView);
        ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
        String myString  = (String)clipboardManager.getText();
        byte[] base64_byte  = Base64.decode(myString, Base64.DEFAULT);
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64_byte);
        try {
            ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
            MyData myData = (MyData)objectInputStream.readObject();
            textView.setText(myData.getName()+":"+myData.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }               
    }

运行结果如下:
这里写图片描述
这里写图片描述

代码部分就算实现完了,相关涉及数据流转换的部分如有不清楚的可以百度看看类的使用,反正就是字节流写进去,字节流再读出来,Base64这个是android框架中工具类,可以进行加密解密。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值