[英]String can't get inside the broadcast receiver
我是android的新手,正尝试开发一个应用程序。我有一个BroadcastReceiver类和一个activity类。它是为管理音频控件(静音,铃声,振动)而创建的。即在接收SMS接收器时检查消息正文并将其与用户给定的关键字进行比较(在活动页面中使用edit Text),在这里我遇到了一个麻烦,我将这个字符串(editText值传递给broadcastReceiver)传递到了那里,但是在try块中,此字符串变量为null。任何人都可以帮忙我...
活动课
@Override
protected void onCreate(Bundle savedInstanceState) {.....
.......
acivatebtn.setOnClickListener(new View.OnClickListener(){....
....public void onClick(View v) {
String kslnt=txtkeysilent.getText().toString();....
Intent intent = new Intent("package.action.string");
if (checksilnt.isChecked()){intent.putExtra("extra", kslnt);}
sendBroadcast(intent);
BroadcastReceiver类
public class IncomingSms extends BroadcastReceiver {
AudioControl audio;
final SmsManager sms = SmsManager.getDefault();
private AudioManager myAudioManager;
public String silent;
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i("Receiver", "Broadcast received: " + action);
if(action.equals("package.action.string")){
silent = intent.getExtras().getString("extra");
/* int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "senderNum: "+ state+rng+vbrt, duration);
toast.show();*/
}
myAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE );
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
String message = currentMessage.getDisplayMessageBody().toString();
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "senderNum: "+ state+rng+vbrt, duration);
toast.show();
Log.i("SmsReceiver","message:" + message);
if (message.equals(silent )){myAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);}
this.abortBroadcast();
} // end for loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" +e);
}
}
}
这里的值'silent'应该包含关键字(来自活动editText)
if (message.equals(silent )){myAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);}
但无声显示为空值...
在此块中,它正确显示(此处显示editText字符串)
String action = intent.getAction();
Log.i("Receiver", "Broadcast received: " + action);
if(action.equals("package.action.string")){
silent= intent.getExtras().getString("extra");
/* int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "senderNum: "+ state+rng+vbrt, duration);
toast.show();*/
}
但无声显示为空值...
问题在于,在广播数据/意图时,您已经将字符串值放入了Intent
,而在检索时,您正试图从Intent
的附加项中获得该字符串,即Bundle
。 因此,要解决此问题,您需要从Intent
而不是Intent
extras( Bundle
)获取它。
你把像
intent.putExtra("extra", kslnt);
它不应该像(特别是在您的情况下,因为您没有将值放入Bundle
)
silent = intent.getExtras().getString("extra");
所以你应该得到像下面的值
intent.getStringExtra("extra");
特别是您的校正方法
String action = intent.getAction();
Log.i("Receiver", "Broadcast received: " + action);
if(action.equals("package.action.string")){
//silent= intent.getExtras().getString("extra"); // this is wrong
intent.getStringExtra("extra"); //get String from intent getStringExtra method (Because you have put string values in Intent not in Intent's putExtras's (Bundle)
/* int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, "senderNum: "+ state+rng+vbrt, duration);
toast.show();*/
}
让我知道
此问题是由于AudioManager的未初始化而引起的,此处仅声明而不初始化
myAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
我通过添加这一行来解决这个问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.