2017-02-11 36 views
0

我是Android新手,试图开发一个应用程序。我有一个BroadcastReceiver类和一个活动class.it是为管理音频控制(无声,振铃,振动)而创建的。这是当接收到一个SMS接收器检查邮件正文并将其与用户给定关键字进行比较(使用活动页面中的编辑文本)在这里,我遇到了一个麻烦,我通过这个字符串(editText值broadcastReceiver)。它到达那里,但内试图阻止此字符串变量被null.Any一个可以帮我...字符串无法进入广播接收器

Activity类

@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); 

广播接收器类

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); 
    } 
} 

}

这里值 '无声' 应包含关键字(从活动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();*/ 
    } 
+0

你有没有调试过e'onReceive'方法?如果作品和'沉默'分配值?因为它可能没有价值,因为你根据条件传递它的值! –

+0

是的,我调试了这个程序,没有错误。 '如果'。正在工作,但它不是我所期望的。无声的价值是从活动分类中分配的。' s editText –

+0

在活动中调试并检查checksilnt.isChecked()的值。它是虚假还是真实的... – aj0822ArpitJoshi

回答

0

但沉默显示了一个空值...

问题,而广播数据/意图,你已经把字符串值Intent &在回想的时候,你试图从Intent的额外值中得到这个字符串,这将是Bundle。所以要解决这个问题,你需要从Intent得到它,而不是从Intent临时演员(Bundle)。

intent.putExtra("extra", kslnt); 

你已经把值它不应像(特别是在你的情况下,你是不是在Bundle把值)

silent = intent.getExtras().getString("extra"); 

所以你应该得到的值 like below

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();*/ 
    } 

让我知道,如果有什么

+0

你看了他的错误日志!他将它添加到评论 –

+0

@AtefHares我没有发现错误日志的问题.. – user1140237

+0

@AtefHares我检查了问题,它被提及**但沉默显示空值... **,我想我的答案将解决** null值**相关问题。 – user1140237

0

这个问题是出现是由于AudioManager非初始化,这只是声明,没有初始化

myAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 

我通过添加这条线解决了这个问题