2014-05-14 5 views
-4

메신저에 전화 활동에서 전화 번호를 putExtra를 통해 보내고 다이얼 활동에 값을 받았습니다. 처음 getIntent 함수가 올바른 값을 받았지만 두 번째 시간에 올바른 값을받지 못했습니다. 첫 번째 vale은 두 번째 시간에 표시됩니다.인 텐트 함수가 올바르게 작동하지 않습니다.

전화 활동

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 활동에 SINGLE_TOP 또는 기타 같은 플래그가 있습니까? 그렇다면 onCreate가 호출되지 않을 수 있습니다. 이 경우 작업에서 onNewIntent() 메서드를 재정의해야합니다. –

답변

-1

번들 객체를 생성 시도하고 intent.putExtras (번들)를 통해 전달이 의도을 통해 엑스트라를 전달하는 적절한 방법은 (nFreeLineNo는 int이고 sPhone은 문자열이 아닙니다.) :

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 이 같은 개발 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 
} 

희망, 나는이 문제를 가지고이 당신을 도움이되지 않으면

+0

이 작동하지 않습니다. – user3136235

+0

다음에 stacktrace를 게시하십시오. 그렇지 않으면 도움이되지 못합니다. – BamsBamx

+0

이것은 쓸데없는 대답입니다. 추가 기능은 이미 '번들'입니다. 당신은 단순히'putExtra()'(OP가 벌써하고있는)을 사용하여 프리미티브와'String' 엑스트라를 추가 할 수 있습니다. 이러한 추가 기능을 추가 Bundle에 넣은 다음 해당 데이터를 하나의 Bundle에서 Bundle으로 복사하려면'putExtras() '를 호출하면 오버 헤드가 발생하지 않습니다. 결국 그것은 OP가 이미하고있는 것과 정확히 동일합니다 (이것이이 해답이 문제를 해결하지 못하는 이유입니다). –

0

Phone 활동이 시작 로그 캣에서 오류 스택 추적을 게시하시기 바랍니다,이 방법

해결 DialPad 액티비티를 사용하는 Intent.FLAG_ACTIVITY_REORDER_TO_FRONT. 즉, 작업 스택에 DialPad의 활성 (완료되지 않은) 인스턴스가 이미있는 경우이 활동 인스턴스는 활동 스택의 맨 앞에 간단히 이동됩니다. 이 경우 onCreate()DialPad으로 표시되지 않습니다. 활동을 다시 생성하지 않기 때문입니다. 대신 onNewIntent()이 호출됩니다. DialPad에이 메서드를 재정의하지 않았으므로이 메서드 호출이 표시되지 않습니다. 당신이 onCreate()에 텐트 엑스트라에서 LineNoPhoneNo를 추출하기 때문에

, 당신은 항상 첫 번째 Intent에서 얻을 데이터 만 사용합니다. 이것은 정확하게 당신이보고있는 문제입니다.

는, 그것을 해결 onNewIntent()을 무시하고 당신이 onNewIntent()에서받는 Intent 인수에 전달되는 엑스트라에서 LineNoPhoneNo를 추출합니다.

관련 문제