我是靠谱客的博主 等待大炮,最近开发中收集的这篇文章主要介绍通过Clipboard传递数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    android开发中经常会碰到传递数据,尤其是2个Activity之间,当然我们更喜欢用Intent毕竟启动Activity的时候用的就是Intent ,但只有这一种方法吗,下面就给大家介绍一种通过剪切板传递数据的方法,为了防止该数据被任意的复制黏贴,我们用Base64加密。

布局文件很简单,第一个Activity的布局文件只有一个Button 触发第二个Activity,第二个Activity只有一个TextView用来显示数据。

简单起见,我们只贴出Activity的部分,同时不要忘了四大组建需要在manifest里面注册的哦。

package com.example.blog;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.StreamCorruptedException;

import android.app.Activity;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
import android.util.Base64;
import android.widget.TextView;

public class ClipActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.showclip);
		TextView tv=(TextView) findViewById(R.id.tv);
		/**
		 * 下面的代码从剪切板中获取Base64格式的字符串
		 */
		ClipboardManager clipboard=(ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
		String base64Str=clipboard.getText().toString();
		byte[] buffer=Base64.decode(base64Str, Base64.DEFAULT);
		ByteArrayInputStream bais=new ByteArrayInputStream(buffer);
		try {
			ObjectInputStream ois=new ObjectInputStream(bais);
			//将byte[]数据还原成String对象
			String receiveData=(String) ois.readObject();
			tv.setText(receiveData);
		} catch (StreamCorruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

第二个Activity:

package com.example.blog;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Date;

import android.app.Activity;
import android.app.Application;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Base64;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button bt=(Button) findViewById(R.id.clip);
		bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent=new Intent(MainActivity.this,ClipActivity.class);
				String data="我是通过ClipBoard传递的数据";
				ClipboardManager clipboard=(ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
				//下面代码将data转化为Base64格式的字符串
				ByteArrayOutputStream baos=new ByteArrayOutputStream();
				String base64str="";
				try {
					ObjectOutputStream oos=new ObjectOutputStream(baos);
					oos.writeObject(data);
					//使用Base64.encodeToString方法将byte[]数据装换成Base64字符串
					base64str=Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
					oos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				//向剪切板写入Base64格式的字符串
				clipboard.setText(base64str);
				startActivity(intent);
			}
		});
	}
}
于是,我们又掌握了一种传递数据的方法,不过需要注意的是既然此处使用了剪切板其他地方的copy的内容就没了哦


最后

以上就是等待大炮为你收集整理的通过Clipboard传递数据的全部内容,希望文章能够帮你解决通过Clipboard传递数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部