2 つのユーザー定義リストの SMS 操作の受信を処理する SMS アプリを作成しています。リストごとに、アクティビティと、favorite_list.xml や contact_list.xml などの xml ファイルを作成しました。これらの xml ファイル内には、2 つのトグル ボタンがあります。私がやろうとしているのは、SMS を受信するたびに、すべてのトグル ボタンの状態 (オン/オフ) を学習することです。
ここに私の 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 はアクティビティから拡張されていないため、直接使用することはできません。これまでのところ、findViewByIdを使用しようとしたもの
1-コンテキストをアクティビティにキャスト
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);
}
アプリの起動時にトグルボタンのステータスしか表示されないため、これも機能しません。助けてください、ありがとう。