主要的代码实现
PhoneCaller.java
package cn.com.android.phone; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class PhoneCaller extends Activity { private EditText editText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); editText = (EditText) findViewById(R.id.editText); Button button = (Button) findViewById(R.id.myButton); button.setOnClickListener(new OnClickListener(){ public void onClick(View v) { String number = editText.getText().toString(); // 声明打电话的意图 Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number)); // 将意图传递给操作系统 PhoneCaller.this.startActivity(intent); } }); } }
main.xml代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <EditText android:id="@+id/editText" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button" /> </LinearLayout>
这里一定要注意,因为我们拨打电话是使用的android系统本身携带的功能,所以一定要进行权限说明,权限说明定义在AndroidManifest.xml文件当中。现在我们看看这个AndroidManifest文件的代码:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.com.android.phone" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".PhoneCaller" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> </manifest>
需要注意的是:
第一,语句<uses-permission android:name="android.permission.CALL_PHONE"/>的位置,它与application是同级的。
第二,如何查找用户权限呢,可以通过api下,android.permission这个类来进行查找
我们知道,一个电话是没法打电话的,我们想模拟打电话,那么肯定要最少有两个电话,这时候,我们就要启动另一个avd了。
这里需要注意的是,其端口号,就是电话号码。
如图,左上角的5554.
----------------------------------------------------------------
有些时候,我们并不像用户直接把电话打出去,而是只是单纯的想调出来拨打电话的那个节目,这时候我们应该怎么办呢,这里就让我们一起来一下。
private void caller1(){ Intent intent = new Intent(Intent.ACTION_CALL_BUTTON); startActivity(intent); }
该intent也可以通过Intent intent = new Intent("android.intent.action.CALL_BUTTON");来进行声明,本质上实际上是一样的。
有关和电话拨号有关的权限,基本上如下:
Android.permission.CALL_PHONE:允许程序传入电话拨号直接进行拨号,不用通过电话界面进行确认。
Android.permission.CALL_PRIVILEGED:允许程序将电话传给拨号程序,用户进行界面确认之后才会进行拨号。