Android clipboard code that works on all API levels

后端 未结 4 967
[愿得一人]
[愿得一人] 2020-12-09 07:05

The clipboard code that works for API levels < 11 crashes on devices with API levels >= 11.

The clipboard code that work for API level >= 11 crashes on devices wi

4条回答
  •  情话喂你
    2020-12-09 07:37

    Write yourself your own Clipboard compat class, for example:

    import android.annotation.SuppressLint;
    import android.content.ClipData;
    import android.content.Context;
    import android.net.Uri;
    
    
    public class ClipboardCompat {
        private android.content.ClipboardManager currentCM=null;
        private android.text.ClipboardManager legacyCM=null;
    
        public ClipboardCompat() {
            if(android.os.Build.VERSION.SDK_INT >= 11 && currentCM == null) {
                currentCM = (android.content.ClipboardManager)
                        [getsomecontext].getSystemService(Context.CLIPBOARD_SERVICE);
            }
            else if(legacyCM == null)
            {
                legacyCM = (android.content.ClipboardManager)
                        [getsomecontext].getSystemService(Context.CLIPBOARD_SERVICE);
            }
        }
    
        @SuppressLint("NewApi")
        public String getText() {
            if(currentCM!=null) {
                try{
                    return currentCM.getPrimaryClip().getItemAt(0).getText().toString();
                } catch (NullPointerException e) {
                    return null;
                }
            }
            else
            {
                try{
                    return legacyCM.getText().toString();
                } catch (NullPointerException e) {
                    return null;
                }
            }
        }
    
        @SuppressLint("NewApi")
        public Uri getUri() {
            if(currentCM!=null) {
                try{
                    return currentCM.getPrimaryClip().getItemAt(0).getUri();
                } catch (NullPointerException e) {
                    return null;
                }
            }
            else
            {
                return null;
            }
        }
    
        @SuppressLint("NewApi")
        public void set(String name, String s) {
            if(currentCM!=null) {
                ClipData clip = ClipData.newPlainText(name, s);
                currentCM.setPrimaryClip(clip);
            }
            else
            {
                legacyCM.setText(s);
            }
        }
    
        @SuppressLint("NewApi")
        public void set(String name, Uri u) {
            if(currentCM!=null) {
                ClipData clip = ClipData.newRawUri(name, u);
                currentCM.setPrimaryClip(clip);
            }
            else
            {
                legacyCM.setText(u.toString());
            }
        }
    }
    

提交回复
热议问题