2012-03-07 485 views
0

我想創建一個用戶可以通過短信,電子郵件和電話聯繫朋友的方式。我已完成電子郵件和短信部分。我已經想通了如何使用createChooser選擇通過點擊一個按鈕如何的消息會使用電子郵件或短信,以此實現發送,下面的代碼是怎麼做到這一點:打電話意圖撥打電話,在Android中選擇一個電話號碼?

Intent i = new Intent(Intent.ACTION_SEND); 

       i.setType("text/plain"); 

       i.putExtra(Intent.EXTRA_EMAIL , new String[]{""}); 

       i.putExtra(Intent.EXTRA_SUBJECT, "Check out my awesome score!"); 
       i.putExtra(Intent.EXTRA_TEXT , "I am playing this awesome game called Tap the Button, and I just scored the incredible highscore of " +s+ " Taps!!\n\nCan you beat it!?"); 
       try { 
        startActivity(Intent.createChooser(i, "Send mail...")); 
       } catch (android.content.ActivityNotFoundException ex) { 
        Toast.makeText(Fail.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show(); 
       } 

我的目標應該有一個按鈕來打開這樣的表單,用戶可以從電話簿中選擇一個電話號碼。

上述電郵和文本代碼讓我選擇從可用的方式發送消息做這款手機上,如果我選擇通過電子郵件發送創建使用putExtra的形式的方式。我想要一個額外的人點擊並從電話地址簿中選擇一個電話號碼。這是我最近的嘗試:

Intent callIntent = new Intent(Intent.ACTION_CALL); 

        callIntent.setType("text/plain"); 
        callIntent.putExtra(Intent.EXTRA_PHONE_NUMBER, new String[]{""}); 

        try { 
        startActivity(Intent.createChooser(callIntent, "CAlling...")); 
       } catch (android.content.ActivityNotFoundException ex) { 
        Toast.makeText(Fail.this, "There are no call clients installed.", Toast.LENGTH_SHORT).show(); 
       } 

當我運行代碼時,它捕捉到一個異常,表示沒有調用客戶端。我在我的機器人清單中有這個權限:

uses-permission android:name="android.permission.CALL_PHONE" 

我希望對此有任何意見,謝謝。

回答

2

通話是通過電話來達到的:方案,不使用額外的:

Intent callIntent = new Intent(Intent.ACTION_CALL); 
callIntent.setData(Uri.parse("tel:" + number)); 
+0

當使用按壓內的呼叫按鈕應用程序,我不希望他們輸入數字,我希望他們鍵入聯繫人姓名,他們鍵入,選項出現,這是電子郵件和短信代碼發生的情況,我希望他們實現相同。如果你說它不同,這是否意味着用戶需要知道一個數字才能做到這一點? 感謝 – deucalion0 2012-03-07 15:51:42

+1

給某人打電話,你需要他們的電話號碼,是的。但發送短信到,所以我不明白爲什麼它會從一個案件到另一個不同。另外,如果你想召喚通話應用程序,因爲我張貼的電子郵件和短信它開闢了一個選擇的方式來發送消息的代碼中使用ACTION_DIAL – njzk2 2012-03-07 15:58:56

+0

,我選擇其中任何和形式出現在屏幕上,這需要一個數字作爲文本,電子郵件的電子郵件地址等。當我點擊數字/電子郵件字段時,電話簿會自動打開。如果我輸入r,它會以r開頭,我想用電話撥打同樣的東西,所以它打開了一個字段,輸入一個數字,然後點擊開始鍵入名稱,顯示您的聯繫人,您選擇一個名稱,然後按回車鍵,打開呼叫意圖。 – deucalion0 2012-03-07 16:05:00

1

這將很好地工作.....

public class Call_Sms_Email_IntentActivity extends Activity implements 
    OnClickListener { 
    private static final String NUMBER = "9409668178"; 
    Button call, sms, email; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    call = (Button) findViewById(R.id.call_btn); 
    sms = (Button) findViewById(R.id.sms_btn); 
    email = (Button) findViewById(R.id.email_btn); 

    call.setOnClickListener(this); 
    sms.setOnClickListener(this); 
    email.setOnClickListener(this); 

} 
public void onClick(View v) { 
    if (v == call) { 
     // startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + 
     // mEditText_number.getText()))); 
     Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" 
       + Call_Sms_Email_IntentActivity.NUMBER)); 
     startActivity(intent); 
    } else if (v == sms) { 
     Intent intent = new Intent("android.intent.action.VIEW"); 
     /** creates an sms uri */ 
     Uri data = Uri.parse("sms:"); 
     intent.setData(data); 

     /* 
     * Put the default text intent.putExtra("address", "12125551212"); 
     * intent.putExtra("sms_body","Body of Message"); 
     */ 
     /** 
     * Initiates the SMS compose screen, because the activity contain 
     * ACTION_VIEW and sms uri 
     */ 
     startActivity(intent); 
    } else if (v == email) { 

     Intent emailIntent = new Intent(Intent.ACTION_SEND); 

     String aEmailList[] = { "[email protected]"}; 
     String aEmailCCList[] = { 
     "[email protected]","[email protected]"}; 
     String aEmailBCCList[] = { "[email protected]" }; 

     emailIntent.putExtra(Intent.EXTRA_EMAIL, aEmailList); 
     emailIntent.putExtra(Intent.EXTRA_CC, aEmailCCList); 
     emailIntent.putExtra(Intent.EXTRA_BCC, aEmailBCCList); 
     emailIntent.putExtra(Intent.EXTRA_SUBJECT, "My subject"); 
     emailIntent.putExtra(Intent.EXTRA_TEXT, "My message body."); 

     emailIntent.setType("text/plain"); 
     startActivity(Intent.createChooser(emailIntent, 
     "Send email...")); 
}}}