从服务打开我的应用程序后,无法将setText设置为EditText

时间:2017-12-10 01:19:32

标签: java android

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

1 个答案:

答案 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)