Android 无法从广播侦听器调用对象方法
我有一个简单的sms侦听器类:Android 无法从广播侦听器调用对象方法,android,sms,broadcast,Android,Sms,Broadcast,我有一个简单的sms侦听器类: package net.albanx.smspack; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.widget.Toast; publi
package net.albanx.smspack;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class ReceiverListener extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
ReceiverActivity addtolist = new ReceiverActivity();
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
addtolist.addSMS(msgs[i].getOriginatingAddress(), "now", msgs[i].getMessageBody().toString());
str += "SMS from " + msgs[i].getOriginatingAddress();
str += " :";
str += msgs[i].getMessageBody().toString();
str += "\n";
}
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
}
}
addtolist.addSMS(msgs[i].getOriginatingAddress(), "now", msgs[i].getMessageBody().toString());
被称为。此方法是活动的一部分:
addtolist.addSMS(msgs[i].getOriginatingAddress(), "now", msgs[i].getMessageBody().toString());
public void addSMS(String sms_adress, String sms_date, String message)
{
LayoutParams lparams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
// from Number label
TextView from=new TextView(this);
from.setLayoutParams(lparams);
from.setBackgroundColor(Color.argb(200, 0, 0, 0));
from.setTextAppearance(getApplicationContext(), R.style.from_style);
from.setText(this.getString(R.string.label_from_sms)+":"+ sms_adress);
linearLayout.addView(from);
}
问题出在这一行:
addtolist.addSMS(msgs[i].getOriginatingAddress(), "now", msgs[i].getMessageBody().toString());
TextView from=new TextView(this);
在引用时,该值为空
addtolist.addSMS(msgs[i].getOriginatingAddress(), "now", msgs[i].getMessageBody().toString());
我试图使短信侦听器在收到短信时更新我的跑步应用程序的短信列表。似乎我无法从广播侦听器调用活动方法。任何人都可以解释我如何解决这个问题吗?您不能使用new关键字实例化活动。因此,如果您想将值从广播接收器传递到活动,请使用Intent传递值,如下所示:
addtolist.addSMS(msgs[i].getOriginatingAddress(), "now", msgs[i].getMessageBody().toString());
将getOriginatingAddress和getMessageBody作为以下内容传递给您的活动:
addtolist.addSMS(msgs[i].getOriginatingAddress(), "now", msgs[i].getMessageBody().toString());
public class ReceiverListener extends BroadcastReceiver
{
List<String> getOriginatingAddresslist = new ArrayList<String>();
List<String> getMessageBodylist = new ArrayList<String>();
@Override
public void onReceive(Context context, Intent intent)
{
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
ReceiverActivity addtolist = new ReceiverActivity();
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
getOriginatingAddresslist.add(msgs[i].getOriginatingAddress());
getMessageBodylist.add(msgs[i].getMessageBody().toString());
}
Intent msgIntent = new Intent(context,YourActivity.class);
msgIntent.putStringArrayListExtra("getOriginatingAddresslist", getOriginatingAddresslist);
msgIntent.putStringArrayListExtra("getMessageBodylist", getMessageBodylist);
startActivity(msgIntent);
公共类ReceiverListener扩展广播接收器
{
List GetOriginagingAddressList=新建ArrayList();
List getMessageBodylist=新建ArrayList();
@凌驾
公共void onReceive(上下文、意图)
{
//---获取传入的SMS消息---
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
字符串str=“”;
ReceiverActivity addtolist=新的ReceiverActivity();
if(bundle!=null)
{
//---检索收到的SMS消息---
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];
对于(inti=0;i我将再次回答这类问题(希望每次我都有一美元)
addtolist.addSMS(msgs[i].getOriginatingAddress(), "now", msgs[i].getMessageBody().toString());
不能使用new
实例化活动
addtolist.addSMS(msgs[i].getOriginatingAddress(), "now", msgs[i].getMessageBody().toString());
Activity
是Android中的一个特例,任何扩展了Activity
的类的新实例只能由Android操作系统本身创建。您决不能试图从Activity
本身之外访问Activity
的任何数据成员或方法
addtolist.addSMS(msgs[i].getOriginatingAddress(), "now", msgs[i].getMessageBody().toString());
如果需要将数据传递给活动
,请使用开始活动(…)
并通过Intent
extras传递数据。或者,将您的BroadcastReceiver
嵌套为活动的内部类
,但实际上问题不在这里,而是从listenerohh!调用活动的方法!您正在创建活动的实例,然后调用addSMS。那么这不是问题所在ht表示您的活动没有运行?首先,无法从Broadcasts Receiver调用addSMS。我只是了解了这一点。我需要启动活动,或者只是为了有一个参考,如果任何活动已经启动。谢谢,我只是android中的乞丐,但不是java中的乞丐,所以我尝试像往常一样进行对象编程。只是一个如何使用s的示例tartActivity(…)或更好如果尚未启动,则启动活动,我尝试了,但出现了一些错误。此外,我将执行第二个备选方案。+1(考虑一美元)
addtolist.addSMS(msgs[i].getOriginatingAddress(), "now", msgs[i].getMessageBody().toString());