2014-04-24 25 views
1

我正在製作自定義撥號程序,到現在爲止所有內容都是完美的。現在在測試時,我看到「#」標誌無法正常工作。它顯示在撥號器上,但在呼叫時,它消失。例如,如果我撥打* 121#,當通過股票撥號器撥打電話時,它變爲* 121。這裏是我的活動代碼 -無法解析「#」登錄撥號器

public class DialPadActivity extends Activity { 

private EditText numberField = null; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    initializeButtonArrowClickListeners(); 
} 

public void dialButtonClick(View v) { 
    int buttonId = v.getId(); 
    putNumberToEditText(buttonId); 
} 

public void buttonPhone_click(View v) { 
    if (numberField != null) { 
     String phone = numberField.getText().toString(); 
     String uriString = "tel:" + phone; 
     Intent intent = new Intent(Intent.ACTION_CALL); 
     intent.setData(Uri.parse(uriString)); 
     startActivity(intent); 
    } 
} 

public void putNumberToEditText(int buttonId) { 
    switch (buttonId) { 
    case R.id.dial_button0: 
     putNumber("0"); 
     break; 
    case R.id.dial_button1: 
     putNumber("1"); 
     break; 
    case R.id.dial_button2: 
     putNumber("2"); 
     break; 
    case R.id.dial_button3: 
     putNumber("3"); 
     break; 
    case R.id.dial_button4: 
     putNumber("4"); 
     break; 
    case R.id.dial_button5: 
     putNumber("5"); 
     break; 
    case R.id.dial_button6: 
     putNumber("6"); 
     break; 
    case R.id.dial_button7: 
     putNumber("7"); 
     break; 
    case R.id.dial_button8: 
     putNumber("8"); 
     break; 
    case R.id.dial_button9: 
     putNumber("9"); 
     break; 
    case R.id.dial_button_s: 
     putNumber("*"); 
     break; 
    case R.id.dial_button_p: 
     putNumber("#"); 
     break; 
    } 
} 

public void putNumber(String number) { 
    if (numberField == null) { 
     numberField = (EditText) findViewById(R.id.phone_number_field); 
    } 
    numberField.append(number); 
} 

private void initializeButtonArrowClickListeners() { 
    ImageButton buttonArrow = (ImageButton) findViewById(R.id.button_arrow); 
    buttonArrow.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (numberField != null && numberField.length() > 0) { 
       String previousNumbers = numberField.getText().toString(); 
       String numbersMinusTheLast = previousNumbers.substring(0, 
         numberField.length() - 1); 
       numberField.setText(numbersMinusTheLast); 
      } 
     } 
    }); 
    buttonArrow.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      if (numberField != null) { 
       numberField.setText(""); 
      } 
      return false; 
     } 
    }); 
} 

我在哪裏做錯了?

+0

你沒有'休息;''後putNumber( 「#」);'。你有沒有嘗試輸入「* 123#11」之類的東西? – g00dy

+0

我對這個'break'壞了。但它仍然不起作用。試過* 121#11,但仍然只有* 121。 – EatHeat

+0

因此'#'符號後的所有內容都消失了 - 對嗎? – g00dy

回答

4

使用URLEncoder.encode(字符串, 「UTF-8」);

例如:

String uriString = "tel:" + URLEncoder.encode(phone, "UTF-8"); 
+0

哇,非常感謝。有效。 :O – EatHeat

+0

不錯,爲我工作 –

1

用%23替換#符號。

即:*121%2311代替*121#11

  String uri = "tel:" + "*6133%235345"; 

      Intent intent; 
      intent = new Intent(Intent.ACTION_CALL, Uri.parse(uri)); 
      startActivity(intent); 

輸出爲是這樣的:* 6133#5345

+0

)不起作用,已經試過了,它顯示的是23而不是數字框中的#並且調用方式相同,最後它變成* 12123而不是* 121# – EatHeat

+0

否,它正在工作我試了一下,但是你有一個解決方案:) –