今天看到群里一个兄弟发了一个链接,是介绍Clipboard操作剪贴板的,感觉很有意思,就仔细阅读了下。
链接文章地址
下面,将自己的理解与例子记录一下。
对于剪贴板的操作,其实还是很简单的,只要几行代码就可以轻松搞定了。我们先看最简单的就是把文字接收过来。
这里我写了两个页面,一个MainActivity.java,一个PasteActivity.java。从名字上就能看出来,一个是操作一个是接收剪贴板的页面。代码如下:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context="com.example.cg.clipboardlearn.MainActivity"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="在下方输入要复制的文字:" />
<EditText
android:id="@+id/edit_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_copy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="复制到剪切板"/>
<Button
android:id="@+id/btn_nextPage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="到下一页"/>
</LinearLayout>
MainActivity.java
package com.example.cg.clipboardlearn;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
/**
* Clipboard是Android提供的一个系统服务,它提供了一个全局的剪贴板,让文字、图片、数据,在多App间共享成为可能
* 作者:cg
* 时间:2016/11/16 0016 上午 11:13
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText edit_txt;
private Button btn_copy;
private Button btn_nextPage;
/**
* 定义一个剪贴板管理
*/
private ClipboardManager mClipboardManager;
private ClipData mClipData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mClipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
initControls();
}
/**
* 初始化控件
*/
private void initControls() {
edit_txt = (EditText)findViewById(R.id.edit_txt);
btn_copy = (Button)findViewById(R.id.btn_copy);
btn_copy.setOnClickListener(this);
btn_nextPage = (Button)findViewById(R.id.btn_nextPage);
btn_nextPage.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId())
{
case R.id.btn_copy:
/**
* 将文字信息放到剪贴板上
*/
mClipData = ClipData.newPlainText("text",edit_txt.getText().toString());
mClipboardManager.setPrimaryClip(mClipData);
break;
case R.id.btn_nextPage:
PasteActivity.PasteActivityStart(this);
break;
}
}
activity_paste.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context="com.example.cg.clipboardlearn.PasteActivity"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="显示粘贴过来的内容:"/>
<TextView
android:id="@+id/txt_paste"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn_getData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="得到数据"/>
</LinearLayout>
PasteActivity.java
package com.example.cg.clipboardlearn;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
/**
* 接收剪贴板文字内容
* 作者:cg
* 时间:2016/11/16 0016 下午 3:12
*/
public class PasteActivity extends AppCompatActivity implements View.OnClickListener {
public static void PasteActivityStart(Context context)
{
Intent intent = new Intent();
intent.setClass(context,PasteActivity.class);
context.startActivity(intent);
}
private TextView txt_paste;
private Button btn_getData;
private ClipboardManager mClipboardManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_paste);
mClipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
initControls();
}
/**
* 初始化控件
*/
private void initControls() {
txt_paste = (TextView)findViewById(R.id.txt_paste);
btn_getData = (Button)findViewById(R.id.btn_getData);
btn_getData.setOnClickListener(this);
/**
* 判断当前剪贴板上存在Copy,获取按钮可用,如果
*/
if(mClipboardManager.hasPrimaryClip())
{
btn_getData.setEnabled(true);
}
else
{
btn_getData.setEnabled(false);
}
}
@Override
public void onClick(View view) {
switch (view.getId())
{
case R.id.btn_getData:
/**
* 将剪贴板上的文字信息取出来放到文本框中
*/
ClipData mClipData = mClipboardManager.getPrimaryClip();
ClipData.Item item = mClipData.getItemAt(0);
txt_paste.setText(item.getText().toString());
break;
}
}
}
通过上面的代码,我们就可以很轻松的在PasteActivity页面中得到文字内容,这个时候,做一个很有意思的实验,我们到短信页面,复制一段短信内容,回到PasteActivity页面,点按钮,你得到的就是你复制的短信内容。
ClipboardManager可以创建三种类型的ClipData
分别是Text,URI,intent
下面来看一下intent的操作。新建一个ThreeActivity.java页面,是个空页,就是为了起到跳转用。修改
MainActivity.java页面代码
package com.example.cg.clipboardlearn;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
/**
* Clipboard是Android提供的一个系统服务,它提供了一个全局的剪贴板,让文字、图片、数据,在多App间共享成为可能
* 作者:cg
* 时间:2016/11/16 0016 上午 11:13
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText edit_txt;
private Button btn_copy;
private Button btn_nextPage;
private Button btn_intent;
/**
* 定义一个剪贴板管理
*/
private ClipboardManager mClipboardManager;
private ClipData mClipData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mClipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
initControls();
}
/**
* 初始化控件
*/
private void initControls() {
edit_txt = (EditText)findViewById(R.id.edit_txt);
btn_copy = (Button)findViewById(R.id.btn_copy);
btn_copy.setOnClickListener(this);
btn_nextPage = (Button)findViewById(R.id.btn_nextPage);
btn_nextPage.setOnClickListener(this);
mClipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
Log.e("MainActivity", "剪切板有变化哦");
}
});
btn_intent = (Button)findViewById(R.id.btn_intent);
btn_intent.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId())
{
case R.id.btn_copy:
/**
* 将文字信息放到剪贴板上
*/
mClipData = ClipData.newPlainText("text",edit_txt.getText().toString());
mClipboardManager.setPrimaryClip(mClipData);
break;
case R.id.btn_nextPage:
/**
* 这里做一个有意思的操作
* 我们判断一下,剪贴板里是不是Intent对象,如果是就操作它。如果不是,跳到我们文字接收页面
*/
mClipData = mClipboardManager.getPrimaryClip();
ClipData.Item item = mClipData.getItemAt(0);
if(item.getIntent()!=null)
{
startActivity(item.getIntent());
}
else {
PasteActivity.PasteActivityStart(this);
}
break;
case R.id.btn_intent:
/**
* 我们将一个intent放到剪贴板上
*/
Intent intent = new Intent();
intent.setClass(this,ThreeActivity.class);
mClipData = ClipData.newIntent("Three",intent);
mClipboardManager.setPrimaryClip(mClipData);
break;
}
}
}
运行一下,是不是很有意思。