从非ui线程设置剪贴板

时间:2016-05-28 12:23:09

标签: java android multithreading android-activity clipboard

问题:无法从非ui后台线程设置剪贴板

当我的应用程序在后台时,如何设置剪贴板?

public class Messages {

    public void SetMessage(String text) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
            ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
            clipboard.setText(text);
        } else {
            android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
            ClipData clip = ClipData.newPlainText("NewClip", text);
                            clipboard.setPrimaryClip(clip);
        }
    }
}

错误:无法解析getSystemService(java.lang.String)

我尝试了多种方法来解决这个问题,其中之一就是:

配置类

/* I made a Config class file like so: */
public final class Config {
    public static com.dysanix.official.MainActivity MainContext = null;
}


/* And put this in the onCreate of the MainActivity: */
Config.MainContext = this;


/*
 * And then using Config.MainContext.getSystemService() in the other
 * class works, as long as the UI is visible on the screen.. but as soon as
 * I tab out, the code doesn't work anymore.
 */

我也尝试在MainActivity中创建一个“Runnable”并从另一个类调用它,但同样的问题:它有效,直到我选择退出App。我从一个循环的AsyncTask调用该方法,我知道这是有效的,因为控制台会在循环结束时继续打印一条Log消息。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

  

错误:无法解析getSystemService(java.lang.String)

int firstdigit(int n) { int x = n; while(n != 0) { x = n%10; n = n/10; } return x; } getSystemService()上的一种方法。将Context传递到Context方法,或将该方法移至某些SetMessage()Activity或其他Service实施方案。然后,在Context上调用getSystemService()

  

我尝试了多种方法来解决这个问题,其中之一就是:

不要将Context放在静态字段中。这不仅代表内存泄漏,而且Activity无论如何都会被破坏。

  

问题:无法从非ui后台线程设置剪贴板

这里与线程无关。