我的应用程序具有以下模块,
- 收集用户CB位置码。
- 要将其保存在用户选择的数据库中,例如我的 CB 代码是 465783,我可以将其保存为数据库中的“学院”。
- 为了提供警报功能,在这个模块中,我可以提供一个文本输入,说我将它作为“学院”,并且如果值学院匹配,则当单元广播更新时发出警报。
现在,在我下面的代码中,我已经实现了前 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);
        }                         
    }}
}
需要帮助。
谢谢你。