我有一个Activity
,TextView
名为textView
。在活动中,有一个函数void changeText()
可以更改textView
的文本。可以在活动中按Button
来调用此函数。调用此函数的另一种方法应该是使用通知操作(NotificationCompat.Builder.addAction
)。当调用通知中的操作时,我不希望活动显示在屏幕上。我宁愿让活动在沉默中(在后台)调用void changeText()
。当用户下次进入我的应用程序(并且它仍处于活动状态)时,他应该看到更改的文本。如何实施?
答案 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)
我希望这可以帮到你。
更多信息:
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。您可以将要显示的文字保存在键值对中,然后将其加载并显示在TextView
或onCreate()
方法的onResume()
中。