在我的MainActivity XML文件中,我有一个EditText,其id是editsearch。我有一个服务类,用于收听剪贴板文本并打开我的应用程序。一切都很好,但是当我的应用程序从服务类打开时,我无法将文本设置为我的editsearch。
findViewById
方法在我的服务的onStartCommand
方法中无效。我也尝试将我的editsearch EditText定义为MainActivity类中的静态属性,但没有得到我期望的结果。
这是我的服务类
package com.learn24bd.ad;
import android.app.Service;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;
public class MyServiceReceiver extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("MySerivce","Service Started");
final ClipboardManager clipboard = (ClipboardManager) this.getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
String copiedText = clipboard.getText().toString();
Log.i("Copied",copiedText);
/* here i want to setText to my editsearch
also tried with static property
MainActivity.editsearch.setText(copiedText);
*/
Intent i = new Intent();
i.setClass(getApplicationContext(), MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
});
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
答案 0 :(得分:1)
服务不适合处理用户界面。
相反,在您的情况下,您应该传递要处理的MainActivity
类的剪贴板内容。为此,将其作为额外的意图传递:
Intent i = new Intent();
i.setClass(getApplicationContext(), MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("clipboard_text", copiedText)
startActivity(i);
接收并处理您活动中的文字:
String clipboardText = getIntent().getStringExtra("clipboard_text");
然后,您可以将文字设置为EditText
:
editText.setText(clipboardText)