Java 在不打开应用程序的情况下,使用通知操作更改TextView的文本
我有一个名为Java 在不打开应用程序的情况下,使用通知操作更改TextView的文本,java,android,notifications,Java,Android,Notifications,我有一个名为TextView的Activity和TextView。在活动中有一个函数void changeText(),用于更改textView的文本。按下活动中的按钮可调用此功能。调用此函数的另一种方法是使用通知操作(NotificationCompat.Builder.addAction)。调用通知中的操作时,我不希望活动显示在屏幕上。我更希望活动以静默方式(在后台)调用void changeText()。当用户下次进入我的应用程序时(它仍然处于活动状态),他应该会看到更改的文本。如何实现这
TextView
的Activity
和TextView
。在活动中有一个函数void changeText()
,用于更改textView
的文本。按下活动中的按钮
可调用此功能。调用此函数的另一种方法是使用通知操作(NotificationCompat.Builder.addAction
)。调用通知中的操作时,我不希望活动显示在屏幕上。我更希望活动以静默方式(在后台)调用void changeText()
。当用户下次进入我的应用程序时(它仍然处于活动状态),他应该会看到更改的文本。如何实现这一点?试着研究一下。您可以将要显示的文本保存在键值对中,然后将其加载并显示在onCreate()
或onResume()
方法中的TextView
中。注意:此解决方案仅在应用程序在后台运行时有效,如果要在应用程序不在后台运行时执行此操作,可以使用
有几种方法可以做到这一点,最简单和最好的方法是在活动中简单地存储一个静态字符串,当您创建/恢复该活动时,您会更新文本:
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");
若你们不想在点击按钮时活动显示在屏幕上,你们应该使用pendingent.getBroadcast()或pendingent.getService()并保存在SharedReferences中,如@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>
我希望这能帮助你
更多信息:
您能告诉我如何创建
pendingent
以通知它不会将我的应用程序带到屏幕上吗?那是我的问题。剩下的部分工作得很好。我不太理解你的问题,你不希望应用程序以PendingContent
打开吗?是的,这就是重点。用户应该能够使用通知调用该函数,而无需离开他正在使用的应用程序。谢谢。看起来很有希望。有没有办法使BroadcastReceiver
类成为非静态的,以便从onReceive
方法中调用我周围活动的方法?要使类成为非静态的,您必须在另一个文件中声明并从manifest.xml更新安卓:name receiver我认为问题仍然是如何调用我的来自onReceive方法的活动。我试图从public void onReceive(context-context,Intent-Intent)
中给出的上下文中强制转换活动,但没有成功。实际上,提交的上下文是android.app.ReceiverRestrictedContext的一个实例,而不是我的活动的一个实例,尽管我使用第一个参数调用了pendingent.getBroadcast
。好吧,它不起作用,你需要对接收上下文的活动执行静态方法,举个例子,若您要保存首选项上的值,只需调用将其保存为参数的方法,并将上下文作为参数传递,它应该可以工作
Intent intent = new Intent();
intent.setAction("yourpackage.receiver")
PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT)