gpt4 book ai didi

java - 如何检查android中事件的更新?

转载 作者:行者123 更新时间:2023-12-01 15:03:59 28 4
gpt4 key购买 nike

我的应用程序具有以下模块,

  1. 收集用户 CB 位置代码。
  2. 要将其保存在用户选择的数据库中,例如我的 CB 代码是 465783,我可以将其保存为数据库中的“学院”。
  3. 为了提供警报功能,在此模块中,我可以提供一个文本输入,假设我将其指定为“College”,并且当小区广播更新时,如果值 College 与值匹配,则会发出警报。

现在,在下面的代码中,我已经实现了前 2 个模块以及所需的数据库条目、数据库搜索等,但我无法读取更新的 CB 位置值。

public class Alarm extends MainActivity {

public String str;

public void onReceive(Context context, Intent intent) {
//---get the CB message passed in---
Bundle bundle = intent.getExtras();
SmsCbMessage[] msgs = null;
str = "";
if (bundle != null) {
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsCbMessage[pdus.length];
for (int i=0; i<msgs.length; i++) {
msgs[i] = SmsCbMessage.createFromPdu((byte[])pdus[i]);
str += "CB " + msgs[i].getGeographicalScope() + msgs[i].getMessageCode() + msgs[i].getMessageIdentifier() + msgs[i].getUpdateNumber();
str += " :";
str += "\n";
}
}
}


EditText user_value;
Button startalarm;
Button stopalarm;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.third);

startalarm = (Button) findViewById(R.id.startalarm);
stopalarm = (Button) findViewById(R.id.stopalarm);
user_value = (EditText) findViewById(R.id.user_value);

final Ringtone ringtone;
ringtone = RingtoneManager.getRingtone(getBaseContext(), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE));

startalarm.setOnClickListener(new View.OnClickListener()
{

public void onClick(View arg0)
{
// TODO Auto-generated method stub
if(user_value.length()==0)
{
Toast.makeText(getBaseContext(), "Please enter a value.", Toast.LENGTH_LONG).show();
}

Toast.makeText(getApplicationContext(), "alarm set", Toast.LENGTH_LONG).show();

//I want my alarm event to be started from here whenever a new CB sms arrives.

SQLiteDatabase aa = openOrCreateDatabase("MLIdata", MODE_WORLD_READABLE, null);
Cursor c = aa.rawQuery("SELECT CblocationName FROM MLITable WHERE CblocationCode = '"+str+"'", null);
c.moveToFirst();
c.getString(c.getColumnIndex("CblocationName"));
String sas = user_value.getText().toString();
if(sas.equals(c.getString(c.getColumnIndex("CblocationName"))))
{
//here comes the alarm code


if(ringtone == null)
{
Log.d("Debug", "ringtone is null");
}
else
{
ringtone.play();

}
}
}


});

stopalarm.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
// TODO Auto-generated method stub
ringtone.stop();
}
});
}
}

详细说明:每当用户进入新的塔位置时,他都会从塔获取更新的小区广播消息,因此当此 cbsms 到达时,我需要启动检索 CB 区号的事件并将其与我的区域数据库进行比较代码(显然有用户设置的相应区号名称),当用户给定的区域名称的相应区号与我当前的区号匹配时,需要启动警报,这里我无法检测更新位置的到来。

如果我的问题陈述需要进一步解释,请评论。

从下面收到的评论中,我推断出我需要一个接收器类,我为我的小部件创建了一个具有相同功能的接收器类(在小部件上显示 Cb 位置代码),现在我不需要如何在我的应用程序中激活它。

我的WidgetReceiver.java

public class CbReceiver extends BroadcastReceiver
{


public void onReceive(Context context, Intent intent) {
//---get the CB message passed in---
Bundle bundle = intent.getExtras();
SmsCbMessage[] msgs = null;
String str = "";
if (bundle != null) {
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsCbMessage[pdus.length];
for (int i=0; i<msgs.length; i++) {
msgs[i] = SmsCbMessage.createFromPdu((byte[])pdus[i]);
str += "CB " + msgs[i].getGeographicalScope() + msgs[i].getMessageCode() + msgs[i].getMessageIdentifier() + msgs[i].getUpdateNumber();
str += " :";
str += msgs[i].getMessageBody().toString();
str += "\n";

abortBroadcast();
Toast.makeText(context, str, Toast.LENGTH_LONG).show();

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget);
ComponentName thisWidget = new ComponentName(context,MyWidget.class);
remoteViews.setTextViewText(R.id.update,str);
appWidgetManager.updateAppWidget(thisWidget, remoteViews);

}
}}
}

需要帮助。

谢谢。

最佳答案

  1. 在塔台更换时从接收器开始您的 Activity 。使用 Intent 从接收器开始您的 Activity 。例如:请参阅上述警报示例,Alarm Example

  2. 在 Android Manifest.xml 中注册您的接收器。

  3. 从接收器类发送广播消息也会更新接收器内的数据库。
  4. 在您的 Activity 中发现同样的情况。您可以为此使用自定义广播。
  5. 现在激活 Activity 闹钟。

希望这些步骤对您有所帮助。请引用我提到的示例。

关于java - 如何检查android中事件的更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13227952/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com