</br>
<pre>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- 文本編輯框 -->
<EditText
android:id="@+id/et_num"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入電話號碼"/>
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="撥打"/>
</LinearLayout>
</pre>
<pre>
package com.example.administrator.basecase;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
// 實(shí)現(xiàn)電話撥號器功能
public class MainActivity extends AppCompatActivity {
EditText et_num;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
</br>
//必須調(diào)用一次父類的該方法跑慕,因?yàn)楦割愔凶隽舜罅康墓ぷ?br>
super.onCreate(savedInstanceState);
</br>
//該方法是從Activity類繼承過來的杜耙,用于將xml布局文件跟當(dāng)前Activity綁定起來央星,
//然后展示到用戶界面
//通過R的內(nèi)部類layout(沒錯,layout是一個類名盾碗,顯然沒有按照java命令規(guī)范起來,這里
//google有其用意)獲取到activity_main.xml文件 的引用
setContentView(R.layout.activity_main);
</br>
//通過調(diào)用父類的 findViewById 方法,根據(jù)控件的 id 獲取控件對象
et_num = (EditText) findViewById(R.id.et_num);
btn = (Button) findViewById(R.id.btn);
</br>
//給 Button 設(shè)置點(diǎn)擊監(jiān)聽器萌腿,通過該監(jiān)聽器才能監(jiān)聽到用戶的點(diǎn)擊事件,
//這里傳入的實(shí)現(xiàn) OnClickListener 接口的子類對象
btn.setOnClickListener(new MyOnClickListener());
</br>
}
</br>
//自定義類繼承 OnClickListener 類讥珍,覆寫 onClick 方法历极,如果用戶點(diǎn)擊了按鈕,
//那么系統(tǒng)會回調(diào) onClick 方法
class MyOnClickListener implements View.OnClickListener {
</br>
@Override
public void onClick(View v) {
</br>
// 從 EditText 控件中獲取用戶輸入的數(shù)據(jù)
String num = et_num.getText().toString().trim();
</br>
//創(chuàng)建意圖對象衷佃,因此撥打電話其實(shí)是調(diào)用 Android 系統(tǒng)的拔打電話功能趟卸,
//而且撥打電話是有界面的,因此需要通過 Intent 遠(yuǎn)程調(diào)啟 Activity
Intent intent = new Intent();
</br>
//設(shè)置 Action氏义,代表了你想干嘛锄列,在這個案例中我們想打電話,這是一個很常用
//的動作,因此已經(jīng)被作為 String 類型的常量封裝到 Intent 類中了
//因此這里直接使用 Intent 的 ACTION_CALL 靜態(tài)變量即可觅赊。
intent.setAction(Intent.ACTION_CALL);
</br>
//給 Intent 設(shè)置數(shù)據(jù)右蕊,因?yàn)榇螂娫捒隙ǖ糜袑Ψ教柎a,setData 方法的形參是 Uri 類
//型的吮螺,因此需要使用 Uri 的 parse 方法parse 方法中傳入的是字符串饶囚,在這里字符串
//還必須按照 tel:xxxx 的數(shù)據(jù)個數(shù),因此這是系統(tǒng)在配置文件中寫死了鸠补。隨著課程的深
//入我們會理解為何這里的數(shù)據(jù)格式必須這么寫萝风,這里大家先記住就行。*/
Uri uri = Uri.parse("tel:" + num);
</br>
intent.setData(uri);
</br>
//調(diào)用父類 Activity 中的 startActivity 方法紫岩,傳入意圖规惰,從而實(shí)現(xiàn)調(diào)用系統(tǒng)的打電話功能
startActivity(intent);
</br>
}
}
}
</br>
</pre>
<pre>
添加權(quán)限
</br>
在 Android 系統(tǒng)中凡是可能會侵犯到用戶隱私或者耗費(fèi)用戶錢財?shù)男袨槎急仨毬暶鞒鰜碜谕洌员阕層脩?br>
在安裝 Android 應(yīng)用時有知情權(quán)隘截,然后選擇是否安裝。這是 Android 安全機(jī)制中的一部分闸溃。
在該案例中我們的應(yīng)用實(shí)現(xiàn)了撥打電話的功能勋陪,那么這種行為肯定是需要聲明權(quán)限的贪磺,因此我們必須
在 AndroidManifest.xml 中聲明如下權(quán)限。
</br>
<uses-permission android:name="android.permission.CALL_PHONE"/>
</br>
添加過權(quán)限后部署應(yīng)用诅愚,然后輸入號碼寒锚,測試撥打功能即可。
</pre>