使用通知操作更改TextView的文本,而无需打开应用

时间:2015-06-09 18:34:43

标签: java android notifications

我有一个ActivityTextView名为textView。在活动中,有一个函数void changeText()可以更改textView的文本。可以在活动中按Button来调用此函数。调用此函数的另一种方法应该是使用通知操作(NotificationCompat.Builder.addAction)。当调用通知中的操作时,我不希望活动显示在屏幕上。我宁愿让活动在沉默中(在后台)调用void changeText()。当用户下次进入我的应用程序(并且它仍处于活动状态)时,他应该看到更改的文本。如何实施?

3 个答案:

答案 0 :(得分:2)

如果你不希望在点击按钮时屏幕上显示活动,你应该使用PendingIntent.getBroadcast()或PendingIntent.getService()并保存在SharedPreferences中@Ido说

您可以在名为YourReceiver.java

的新文件中创建广播接收器
public class YourReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        //save your value on shared preferences here
        Log.e("test", "receive broadcast");
    }

}

在AndroidManifest.xml中你必须声明你的接收器

<receiver android:name="yourpackage.YourReceiver">
    <intent-filter>
        <action android:name="yourpackage.receiver"/>
    </intent-filter>
</receiver>

现在您可以创建PendingIntent以放置通知操作按钮

Intent intent = new Intent();
intent.setAction("yourpackage.receiver")

PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT)

我希望这可以帮到你。

更多信息:

Tutorial BroadcastReceiver

http://developer.android.com/reference/android/app/PendingIntent.html

答案 1 :(得分:1)

注意:此解决方案仅在应用程序在后台运行时才有效,如果您希望在应用程序未在后台运行时执行此操作SharedPreferences

有几种方法可以做到这一点,最简单和最好的方法是在活动中简单地存储静态字符串,当您创建/恢复该活动时,您更新文本:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

import java.lang.Override;

public class TextActivity extends Activity
{
    private static String mText;
    public static void setText(String text) { mText = text; }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        TextView textView = (TextView)findViewById(R.id.textView);

        if (mText != null)
            textView.setText(mText);
    }
}

现在,当您收到通知时,您将更新文本:

TextActivity.setText("Blah blah");

答案 2 :(得分:0)

尝试查看SharedPreferences。您可以将要显示的文字保存在键值对中,然后将其加载并显示在TextViewonCreate()方法的onResume()中。