2014-05-14 41 views
-4

即时通讯面临的一个问题是,即时通过putExtra从电话活动发送线路号码,并收到拨号活动的值。 getIntent函数第一次收到正确的值,但在第二次时,他无法收到正确的值。第1个谷值第2次出现。意图功能无法正常工作

手机活动

public class Phone extends Activity 
{ 


    List<Map<String, String>> data; 

    Map<String, String> Line1; 
    Map<String, String> Line2; 
    Map<String, String> Line3; 
    Map<String, String> Line4; 
    Map<String, String> Line5; 

    ListView Lines = null; 

    public void onCreate(final Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     m_objPhone = this; 

     String sPhoneAccountStatus = VaxStatus.m_objVaxStatus.GetPhoneAccountStatus(); 
     m_objPhoneAccountStatus.setText(sPhoneAccountStatus); 

     data = new ArrayList<Map<String, String>>(); 

     Line1 = new HashMap<String, String>(); 

     Line1.put("title", "Line | 1"); 
     Line1.put("status", ""); 

     data.add(Line1); 


     Line2 = new HashMap<String, String>(); 

     Line2.put("title", "Line | 2"); 
     Line2.put("status", ""); 
     data.add(Line2); 

     Line3 = new HashMap<String, String>(); 

     Line3.put("title", "Line | 3"); 
     Line3.put("status", ""); 
     data.add(Line3); 

     Line4 = new HashMap<String, String>(); 

     Line4.put("title", "Line | 4"); 
     Line4.put("status", ""); 
     data.add(Line4); 

     Line5 = new HashMap<String, String>(); 

     Line5.put("title", "Line | 5"); 
     Line5.put("status", ""); 
     data.add(Line5); 

     SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"title", "status"}, new int[] {android.R.id.text1, android.R.id.text2}); 

     Lines.setAdapter(adapter); 

     for (int nLineNo = 0; nLineNo < VaxSIPUserAgent.TOTAL_LINE_COUNT; nLineNo++) 
     { 
      String sLineStatus = VaxStatus.m_objVaxStatus.GetLineStatus(nLineNo); 
      SetStatus(nLineNo, sLineStatus); 
     } 


     Lines.setOnItemClickListener(new OnItemClickListener() 
     { 

      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
      { 
       switch (arg2) 
       { 
        case 0: 
         ShowDialPad(arg2, null); 

         break; 
        case 1: 
         ShowDialPad(arg2, null); 

         break; 
        case 2: 
         ShowDialPad(arg2, null); 

         break; 
        case 3: 
         ShowDialPad(arg2, null); 

         break; 
        case 4: 
         ShowDialPad(arg2, null); 

         break; 

        default: 
         break; 
       } 

      } 

     }); 

    } 

    @Override 
    protected void onResume() 
    { 
     for (int nLineNo = 0; nLineNo < VaxSIPUserAgent.TOTAL_LINE_COUNT; nLineNo++) 
     { 
      String sLineStatus = VaxStatus.m_objVaxStatus.GetLineStatus(nLineNo); 
      SetStatus(nLineNo, sLineStatus); 
     } 

     super.onResume(); 
    } 

    @Override 
    protected void onStart() 
    { 
     VaxPhone.m_objVaxVoIP.IsMuteMic(); 
     VaxPhone.m_objVaxVoIP.IsMuteSpk(); 

     IncommingCallSlider.m_objCallSlider.SetActiveActivity(this, R.id.PhoneRelativeLayout); 
     IncommingCallRing.m_objIncommingCallRing.SetActiveActivity(this); 

     DialCallTone.m_objDialCallTone.SetActiveActivity(this); 

     super.onStart(); 
    } 


    @Override 
    protected void onStop() 
    { 
     VaxPhone.m_objVaxVoIP.SetSpeakerState(m_objcheckSpkPhone.isChecked()); 

     super.onStop(); 
    } 
    @Override 
    protected void onDestroy() 
    { 
     VaxStatus.m_objVaxStatus.SetPhoneActivity(null); 

     super.onDestroy(); 
    } 

    public void OnEndCall(int nLineNo) 
    { 
     SetStatus(nLineNo, "Ready To Use!"); 

    } 

    public static void OnContactPhoneNo(String sPhoneNo) 
    { 
     int nFreeLineNo = VaxPhone.m_objVaxVoIP.GetFreeLine(); 
     m_objPhone.ShowDialPad(nFreeLineNo, sPhoneNo); 
    } 


    public void ShowDialPad(int nFreeLineNo, String sPhoneNo) 
    { 
     Intent intent = new Intent(Phone.this , DialPad.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
     intent.putExtra("LineNo", nFreeLineNo); 
     intent.putExtra("PhoneNo", sPhoneNo); 
     startActivity(intent); 

    } 

    public void OnStatusPhone(int nLineNo, String sStatusMsg) 
    { 
     for (int LineNo = 0; LineNo < VaxSIPUserAgent.TOTAL_LINE_COUNT; LineNo++) 
     { 
      String sLineStatus = VaxStatus.m_objVaxStatus.GetLineStatus(LineNo); 
      SetStatus(LineNo, sLineStatus); 
     } 

     if(m_objDialPad != null) 
      m_objDialPad.OnStatusPhone(sStatusMsg); 
    } 

    public void OnStatusAccount(String sStatusMsg) 
    { 
     m_objPhoneAccountStatus.setText(sStatusMsg); 

     if(m_objDialPad != null) 
      m_objDialPad.OnStatusAccount(sStatusMsg); 
    } 




    public void showSelectedNumber(String number) 
    { 
     Phone.OnContactPhoneNo(number); 
    } 

    void SetStatus(int nLineNo, String sStatusMsg) 
    { 
     if(nLineNo == 0) 
     { 
      Line1 = new HashMap<String, String>(); 
      Line1.put("title", "Line | 1"); 
      Line1.put("status", sStatusMsg); 
      data.set(0, Line1); 

      SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"title", "status"}, new int[] {android.R.id.text1, android.R.id.text2}); 

      Lines.setAdapter(adapter); 
     } 

     if(nLineNo == 1) 
     { 
      Line2 = new HashMap<String, String>(); 
      Line2.put("title", "Line | 2"); 
      Line2.put("status", sStatusMsg); 
      data.set(1, Line2); 
      SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"title", "status"}, new int[] {android.R.id.text1, android.R.id.text2}); 

      Lines.setAdapter(adapter); 
     } 

     if(nLineNo == 2) 
     { 
      Line3 = new HashMap<String, String>(); 
      Line3.put("title", "Line | 3"); 
      Line3.put("status", sStatusMsg); 
      data.set(2, Line3); 
      SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"title", "status"}, new int[] {android.R.id.text1, android.R.id.text2}); 

      Lines.setAdapter(adapter); 
     } 
     if(nLineNo == 3) 
     { 
      Line4 = new HashMap<String, String>(); 
      Line4.put("title", "Line | 4"); 
      Line4.put("status", sStatusMsg); 
      data.set(3, Line4); 
      SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"title", "status"}, new int[] {android.R.id.text1, android.R.id.text2}); 

      Lines.setAdapter(adapter); 
     } 
     if(nLineNo == 4) 
     { 
      Line5 = new HashMap<String, String>(); 
      Line5.put("title", "Line | 5"); 
      Line5.put("status", sStatusMsg); 
      data.set(4, Line5); 
      SimpleAdapter adapter = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2, new String[] {"title", "status"}, new int[] {android.R.id.text1, android.R.id.text2}); 

      Lines.setAdapter(adapter); 
     } 

    } 
} 

拨号活动

public class DialPad extends Activity 
{ 
    private TextView m_objStatus; 
    private Button m_objBtnDial; 




    int m_nLineNo = -1; 
    boolean m_objContactFlag; 

    public static Phone m_objPhone; 
    private static String[] m_objPhoneNum = new String[VaxSIPUserAgent.TOTAL_LINE_COUNT]; 

    public void onCreate(Bundle savedInstanceState) 
    { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     Phone.m_objDialPad = this; 

     Intent intent = getIntent(); 

     int nIntentExtraLineNo = intent.getIntExtra("LineNo", 1); 
     m_nLineNo = nIntentExtraLineNo; 



     final int [] aLineArray = new int[VaxSIPUserAgent.TOTAL_LINE_COUNT - 1]; 

     int nIndex = 0; 

     for (int nLineNo = 0; nLineNo < VaxSIPUserAgent.TOTAL_LINE_COUNT; nLineNo++) 
     { 
      if(m_nLineNo == nLineNo) 
       continue; 

      aLineArray[nIndex] = nLineNo + 1; 
      nIndex++; 

     } 

     String sLineStatus = VaxStatus.m_objVaxStatus.GetLineStatus(m_nLineNo); 
     OnStatusPhone(sLineStatus); 


      String sPhoneNo = intent.getStringExtra("PhoneNo"); 

     if(sPhoneNo != null) 
     { 
      m_objPhoneNum[nIntentExtraLineNo] = sPhoneNo; 
     } 

     m_objEditDialscreen.setText(m_objPhoneNum[nIntentExtraLineNo]); 
    } 




    @Override 
    protected void onStart() 
    { 



     UpdateDialBtn(); 


     if(m_objContactFlag == false) 
      m_objEditDialscreen.setText(m_objPhoneNum[m_nLineNo]); 

     IncommingCallSlider.m_objCallSlider.SetActiveActivity(this, R.id.dialpad); 
     IncommingCallRing.m_objIncommingCallRing.SetActiveActivity(this); 

     DialCallTone.m_objDialCallTone.SetActiveActivity(this); 

     super.onStart(); 
    } 



    @Override 
    protected void onStop() 
    { 
     m_objPhoneNum[m_nLineNo] = m_objEditDialscreen.getText().toString(); 
     super.onStop(); 
    } 


} 
+0

这是'Phone.java'类的所有代码吗? –

+0

检查你是否在第二次传递相同的'sPhoneNo和nFreeLineNo' – SathishKumar

+0

你是否在AndroidManifest的DialPad Activity中有任何标志,如SINGLE_TOP或smth else。如果是这样的创建可能不会被调用。在这种情况下,您必须重写activity中的onNewIntent()方法。 –

回答

-1

尝试创建一个Bundle对象,然后通过intent.putExtras(束)传递,这是通过一个意图通过额外的正确方法(我明白nFreeLineNo是一个int和sPhoneNo一个字符串):

Intent intent = new Intent(Phone.this , DialPad.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
Bundle b = new Bundle(); 
b.putInt("LineNo", nFreeLineNo); 
b.putString("PhoneNo", sPhoneNo); 
intent.putExtras(b); 
startActivity(intent); 

另外,在DialPa d getExtras这样的:

Intent intent = getIntent(); 
Bundle b = intent.getExtras(); 
//Make sure you passed a bundle 
if (b != null){ 
    m_nLineNo = b.getInt("LineNo"); 
    m_sPhoneNo = b.getString("PhoneNo"); 
}else{ 
    //didnt pass bundle, Do what you want 
} 

希望我帮你,我也有这个问题,解决了这个方式

如果不帮你,请从logcat的POST错误堆栈跟踪

+0

不是它不工作 – user3136235

+0

请发布stacktrace然后。否则,我忍不住 – BamsBamx

+0

这是一个无用的答案。其他的东西已经是'Bundle'了。你可以简单地使用'putExtra()'(这个OP已经在做)来添加原语和'String'。把这些额外的东西放到一个额外的Bundle中,然后调用putExtras()将这个Bundle中的数据复制到额外的Bundle中,只是简单的开销,并不能完成任何事情。最后,它和OP已经做的完全一样(这就是为什么这个答案不能解决他的问题)。 –

0

Phone活动启动DialPad活动使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT。这意味着如果任务堆栈中已有活动(未完成)DialPad实例,则该活动实例将简单地移到前面(活动堆栈的顶部)。在这种情况下,onCreate()将不会在DialPad上被调用,因为它不会重新创建活动。相反onNewIntent()将被调用。您尚未覆盖DialPad中的此方法,因此您不会看到此方法调用。

既然你是在onCreate()提取的意图演员LineNoPhoneNo,你永远只使用您从第一Intent获取数据。这正是你所看到的问题。

为了解决这个问题,覆盖onNewIntent()并提取从在您在onNewIntent()收到Intent参数传递的额外LineNoPhoneNo