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
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());
}
}
}