天天看點

Android剪貼闆詳解

    前段時間忙着學東西做東西,這幾天小馬有時間就拿來學習下官方的文檔,裡面好東西太多了,今天看到了Clip,反正不懂,小馬帶着無恥的好奇心,做了個DEMO,先講下注意的一點,就是在使用Android剪貼闆的時候大家隻記住一點就行了,不管是安卓裝置還是PC機,複制粘貼在同一時間裡隻能用于一個對象上,整通俗點就是:PC機上,不可能同時從C槽複制,又從D盤複制就行了,具體的看代碼,很簡單,直接上代碼:

package com.xiaoma.clipboard.demo; 

import android.app.Activity; 

import android.content.ClipData; 

import android.content.ClipData.Item; 

import android.content.ClipDescription; 

import android.content.ClipboardManager; 

import android.content.ContentResolver; 

import android.content.Intent; 

import android.database.Cursor; 

import android.net.Uri; 

import android.os.Bundle; 

import android.view.View; 

import android.view.View.OnClickListener; 

import android.widget.Button; 

import android.widget.Toast; 

/**   

* @Title: ClipBoardDemoActivity.java 

* @Package com.xiaoma.clipboard.demo 

* @Description: 剪貼闆學習 

* @author MZH 

*/ 

public class ClipBoardDemoActivity extends Activity implements OnClickListener{ 

    private Button put = null; 

    private Button get = null; 

    private ClipboardManager clipboard = null; 

    private static final String CONTACTS = "content://com.example.contacts"; 

    private String COPY_PATH = "/copy"; 

    public static final String MIME_TYPE_CONTACT = "vnd.android.cursor.item/vnd.xiaoma.contact"; 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.main); 

        init(); 

    } 

    /** 

     * 初始化方法實作 

     */ 

    private void init(){ 

        put = (Button)findViewById(R.id.button1); 

        put.setOnClickListener(this); 

        get = (Button)findViewById(R.id.button2); 

        get.setOnClickListener(this); 

     * 監聽實作 

    public void onClick(View v) { 

        switch (v.getId()) { 

        case R.id.button1: 

            put(); 

            break; 

        case R.id.button2: 

            get(); 

        default: 

        } 

     * 往Clip中放入資料 

    private void put(){ 

        /** 

         * 往ClipboardManager中可放的資料類型有三種: 

         * 因為大家都知道,就算是電腦,Ctrl+c也不可能在同一時間裡即 

         * 從C槽剪貼,又從D般剪貼,是以小馬隻寫一種簡單的資訊進去, 

         * 另外兩種寫在注釋中 

        //類型一:text 

        clipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); 

        ClipData textCd = ClipData.newPlainText("kkk", "WaHouHou!Clip...."); 

        clipboard.setPrimaryClip(textCd); 

         */ 

         *  

        //類型二:URI 

        Uri copyUri = Uri.parse(CONTACTS + COPY_PATH + "/" + "XiaoMa"); 

        ClipData clipUri = ClipData.newUri(getContentResolver(),"URI",copyUri); 

        clipboard.setPrimaryClip(clipUri); 

        * 

        */ 

        //類型三:Intent 

        //試下在Intent剪貼時使用Bundle傳值進去 

        Intent appIntent = new Intent(); 

        Bundle bundle = new Bundle(); 

        bundle.putInt("xiaoma", 3344258); 

        bundle.putInt("yatou", 3344179); 

        appIntent.putExtra("XiaoMaGuo", bundle); 

        appIntent.setClass(ClipBoardDemoActivity.this, ReceiverClip.class); 

        ClipData clipIntent = ClipData.newIntent("Intent",appIntent); 

        clipboard.setPrimaryClip(clipIntent); 

     * 從Clip中取資料 

    private void get(){ 

        Item item = null; 

        //無資料時直接傳回 

        if(!clipboard.hasPrimaryClip()){ 

            Toast.makeText(getApplicationContext(), "剪貼闆中無資料", Toast.LENGTH_SHORT).show(); 

            return ; 

        }  

        //如果是文本資訊 

        if (clipboard.getPrimaryClipDescription().hasMimeType( 

                ClipDescription.MIMETYPE_TEXT_PLAIN)) { 

            ClipData cdText = clipboard.getPrimaryClip(); 

            item = cdText.getItemAt(0); 

            //此處是TEXT文本資訊 

            if(item.getText() == null){ 

                Toast.makeText(getApplicationContext(), "剪貼闆中無内容", Toast.LENGTH_SHORT).show(); 

                return ; 

            }else{ 

                Toast.makeText(getApplicationContext(), item.getText(), Toast.LENGTH_SHORT).show(); 

            } 

        //如果是INTENT 

        } else if (clipboard.getPrimaryClipDescription().hasMimeType( 

                ClipDescription.MIMETYPE_TEXT_INTENT)) { 

            //此處是INTENT 

            item = clipboard.getPrimaryClip().getItemAt(0); 

            Intent intent = item.getIntent(); 

            startActivity(intent); 

            //........ 

        //如果是URI 

                ClipDescription.MIMETYPE_TEXT_URILIST)) { 

            //此處是URI内容 

            ContentResolver cr = getContentResolver(); 

            ClipData cdUri = clipboard.getPrimaryClip(); 

            item = cdUri.getItemAt(0); 

            Uri uri = item.getUri(); 

            if(uri != null){ 

                String mimeType = cr.getType(uri); 

                if (mimeType != null) { 

                    if (mimeType.equals(MIME_TYPE_CONTACT)) { 

                        Cursor pasteCursor = cr.query(uri, null, null, null, null); 

                        if (pasteCursor != null) { 

                            if (pasteCursor.moveToFirst()) { 

                                 //此處對資料進行操作就可以了,前提是有權限 

                            } 

                        } 

                        pasteCursor.close(); 

                     } 

                 } 

   下面是用來接收Intent傳遞的值,臨時的一個Activity,代碼更簡單:

import android.view.TextureView; 

import android.widget.TextView; 

/** 

 * @Title: ReceiverClip.java 

 * @Package com.xiaoma.clipboard.demo 

 * @Description:臨時用來接收下從Clip傳過來的Intent值 

 * @author MZH 

 */ 

public class ReceiverClip extends Activity { 

    private TextView tv1 ;  

    private TextView tv2 ; 

    protected void onCreate(Bundle savedInstanceState) { 

        // TODO Auto-generated method stub 

        setContentView(R.layout.main2); 

        tv1 = (TextView)findViewById(R.id.xiaoma); 

        tv2 = (TextView)findViewById(R.id.yatou); 

        Intent intent = getIntent(); 

        Bundle b =intent.getBundleExtra("XiaoMaGuo"); 

        if(b != null){ 

            int xiaoma = b.getInt("xiaoma"); 

            int yatou = b.getInt("yatou"); 

            if(!"".equals(String.valueOf(xiaoma)) && !"".equals(String.valueOf(yatou))){ 

                tv1.setText(String.valueOf(xiaoma)); 

                tv2.setText(String.valueOf(yatou)); 

  全局配置檔案裡面沒什麼,如下:

<?xml version="1.0" encoding="utf-8"?> 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 

    package="com.xiaoma.clipboard.demo" 

    android:versionCode="1" 

    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="14" /> 

    <application 

        android:icon="@drawable/guoguo" 

        android:label="@string/app_name" > 

        <activity 

            android:name=".ClipBoardDemoActivity" 

            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=".ReceiverClip"></activity> 

    </application> 

</manifest> 

    如果因為沒效果圖看不爽的話,朋友們可以直接下載下傳小馬寫的DEMO,代碼很簡單,大牛跳過,跟小馬一樣的菜菜可以學習交流下,吼吼...老規矩,如有小馬講不清楚的地方,還請朋友直接批評指點,有錯必改,共同提高進步,謝謝 

<a href="http://down.51cto.com/data/2359963" target="_blank">附件:http://down.51cto.com/data/2359963</a>

     本文轉自華華世界 51CTO部落格,原文連結:http://blog.51cto.com/mzh3344258/792749,如需轉載請自行聯系原作者

繼續閱讀