Android學習筆記(四)——通過剪下板傳遞資料

來源:互聯網
上載者:User

1、在Activity之間傳遞資料還可以利用一些技巧,無論是Windows還是Linux作業系統,都支援一種叫做剪下板的技術(某一程式將資料複製到剪下板上,其它的任何程式都可以從剪下板中擷取資料);

2、建立一個名為“android_intent3”的Android工程;

3、在main.xml檔案中添加Button:

    <Button         android:id="@+id/button"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="Android使用剪下板傳遞資料" />
4、建立布局檔案”other.xml“,添加”TextView“,代碼:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextVeiw        android:id="@+id/msg"        android:layout_width="fill_parent"        android:layout_height="fill_parent" >    </TextVeiw></LinearLayout>
5、聲明一個Activity,”OtherActivity“,並繼承Activity,在此類中建立”onCreate“方法;

6、回到“Main.java”中,新增成員Button,並向Android系統調用剪下板,構造意圖並啟動,代碼:

package com.android.myintent;import android.os.Bundle;import android.app.Activity;import android.content.ClipboardManager;import android.content.Context;import android.content.Intent;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.TextView;public class Main extends Activity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) this.findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub// 從Android系統中調用剪下板的服務ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);String name = "Jack";clipboardManager.setText(name);// 向剪下板添加資料Intent intent = new Intent(Main.this, OtherActivity.class);startActivity(intent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
9、點擊“OtherActivity.java”,添加擷取剪下板方法,擷取剪下板資料,設定到“textView”上,代碼:

package com.android.myintent;import android.app.Activity;import android.content.ClipboardManager;import android.content.Context;import android.os.Bundle;import android.widget.TextView;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) this.findViewById(R.id.msg);ClipboardManager clipboardManager = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);String msgString = clipboardManager.getText().toString();//從剪下板中擷取資料textView.setText(msgString);}public OtherActivity() {// TODO Auto-generated constructor stub}}
10、在“AndroidManifest.xml”上添加“Activity”:

        <activity android:name=".OtherActivity" >        </activity>
11、運行:



12、點擊按鈕,居然提示無法運行,後來經過尋找,發現是因為在Android11版本之後,原來利用剪下板傳遞資料使用的setText()和getText()方法被棄用了,只能使用ClipData對象來代替了~下面我們來對上面的程式做出一點改動即可~

第8步中橙色部分的程式替換為:

ClipData clipData = ClipData.newPlainText("Label", "Jack");clipboardManager.setPrimaryClip(clipData);

第9步中橙色部分的程式替換為:

ClipData clipData = clipboardManager.getPrimaryClip();//從剪下板中擷取資料Item item = clipData.getItemAt(0);textView.setText(item.getText().toString());
13、如果我們想在剪下板中傳遞複雜資料,比如一個對象:先建一個類“MyData”,並使其實現“serializable”介面(在Superclass選項裡):

14、在建立類中新增成員“name”、“age”並提供構造方法,代碼如下:

import java.io.Serializable;public class MyData implements Serializable {private String name;private int age;@Overridepublic String toString() {return "MyData [name=" + name + ", age=" + age + "]";}public MyData(String name, int age) {super();this.name = name;this.age = 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;}}
15、進入“Main.java”,將原來添加的代碼注釋掉,然後執行個體化一個MyData對象,代碼如下(用到了Base64工具類):

package com.android.myintent;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import android.os.Bundle;import android.app.Activity;import android.content.ClipData;import android.content.ClipData.Item;import android.content.ClipboardManager;import android.content.Context;import android.content.Intent;import android.util.Base64;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.TextView;public class Main extends Activity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) this.findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub// 從Android系統中調用剪下板的服務// ClipboardManager clipboardManager = (ClipboardManager)// getSystemService(Context.CLIPBOARD_SERVICE);// 向剪下板添加資料// ClipData clipData = ClipData.newPlainText("label", "Jack");// clipboardManager.setPrimaryClip(clipData);// Intent intent = new Intent(Main.this, OtherActivity.class);// startActivity(intent);MyData myData = new MyData("Jack", 23);// 將對象轉換為字串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 (Exception e) {// TODO: handle exception}ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);ClipData clipData = ClipData.newPlainText("label", base64String);clipboardManager.setPrimaryClip(clipData);Intent intent = new Intent(Main.this, OtherActivity.class);startActivity(intent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
16、進入“OtherActivity.java”,修改代碼如下:

package com.android.myintent;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import android.annotation.SuppressLint;import android.app.Activity;import android.content.ClipData;import android.content.ClipboardManager;import android.content.Context;import android.content.ClipData.Item;import android.os.Bundle;import android.util.Base64;import android.widget.TextView;public class OtherActivity extends Activity {private TextView textView;@SuppressLint("NewApi")@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.other);textView = (TextView) this.findViewById(R.id.msg);ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);ClipData clipData = clipboardManager.getPrimaryClip();// 從剪下板中擷取資料Item item = clipData.getItemAt(0);String msgString = item.getText().toString();byte[] base64_byte = Base64.decode(msgString, 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: handle exception}}public OtherActivity() {// TODO Auto-generated constructor stub}}
Ps:未完待續~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.