繁体   English   中英

字符串无法进入广播接收器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM