我正在创建一个短信应用程序来处理 2 个用户定义列表的接收短信操作。对于每个列表,我创建了一个活动和 xml 文件,例如 favourite_list.xml 和 contact_list.xml。在这些 xml 文件中有 2 个切换按钮。我要做的是,每当收到短信时,了解每个切换按钮的状态(开/关)。
这是我的 SmsReceiver 类
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ToggleButton;
import android.telephony.SmsMessage;
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
String str="";
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
str += "SMS from " + msgs[i].getOriginatingAddress();
}
}
}
}
我知道我应该使用 findViewById() 来达到按钮的状态,但我不能直接使用它,因为 SmsReceiver 不是从 Activity 扩展的。到目前为止,我尝试使用 findViewById
1- 将上下文投射到 Activity
try{
tb = (ToggleButton) ((Activity)context).findViewById(R.id.toggleButton3);
if(tb.isChecked())
Log.d("sms","SOUND-ON");
else if(!tb.isChecked())
Log.d("sms","SOUND-OFF");
}catch(Exception e){
Log.d("sms","Error " + e);
}
它给出了 java.lang.ClassCastException: android.app.ReceiverRestrictedContext
2- 使用 LayoutInflater
try{
LayoutInflater mInf = LayoutInflater.from(context);
View myView = mInf.inflate(R.layout.activity_favorite_list, null);
tb = (ToggleButton) myView.findViewById(R.id.toggleButton3);
if(tb.isChecked())
Log.d("sms","SOUND-ON");
else if(!tb.isChecked())
Log.d("sms","SOUND-OFF");
}catch(Exception e){
Log.d("sms","Error" + e);
}
这也不起作用,因为它仅在应用程序启动时提供切换按钮的状态。请帮忙,谢谢。