name="android.permission.CALL_PHONE"/>
9.
10. 11. android:
icon="@drawable/ic_launcher"
12. android:
label="@string/app_name">
13. 14. android:
name=".MainActivity"
15. android:
label="@string/app_name">
16.
17. name="android.intent.action.MAIN"/>
18.
19. name="android.intent.category.LAUNCHER"/>
20.
21.
22.
23.
24.
④PhoneStateListener例子
更新上面的Activity,模拟拨打电话的状态,当电话拨打结束后,返回原始Activity,实际上只是重启了这个activity。
1.packagenet.cublog.android;
2.
3.importandroid.app.Activity;
4.importandroid.content.Context;
5.importandroid.content.Intent;
6.import.Uri;
7.importandroid.os.Bundle;
8.importandroid.telephony.PhoneStateListener;
9.importandroid.telephony.TelephonyManager;
10.importandroid.util.Log;
11.importandroid.view.View;
12.importandroid.view.View.OnClickListener;
13.importandroid.widget.Button;
14.
15.publicclassMainActivityextendsActivity{
16. privateButtonbutton;
17.
18. @Override
19. publicvoidonCreate(BundlesavedInstanceState){
20.
21. super.onCreate(savedInstanceState);
22. setContentView(R.layout.main);
23.
24. button=(Button)findViewById(R.id.buttonCall);
25.
26. //addPhoneStateListener
27. PhoneCallListenerphoneListener=newPhoneCallListener();
28. TelephonyManagertelephonyManager=(TelephonyManager)this
29. .getSystemService(Context.TELEPHONY_SERVICE);
30. telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);
31.
32.
33. //addbuttonlistener
34. button.setOnClickListener(newOnClickListener(){
35.
36. @Override
37. publicvoidonClick(Viewarg0){
38.
39. IntentcallIntent=newIntent(Intent.ACTION_CALL);
40. callIntent.setData(Uri.parse("tel:
"));
41. startActivity(callIntent);
42.
43. }
44.
45. });
46.
47. }
48.
49. //monitorphonecallactivities
50. privateclassPhoneCallListenerextendsPhoneStateListener{
51.
52. privatebooleanisPhoneCalling=false;
53.
54. StringLOG_TAG="LOGGING123";
55.
56. @Override
57. publicvoidonCallStateChanged(intstate,StringincomingNumber){
58.
59. if(TelephonyManager.CALL_STATE_RINGING==state){
60. //phoneringing
61. Log.i(LOG_TAG,"RINGING,number:
"+incomingNumber);
62. }
63.
64. if(TelephonyManager.CALL_STATE_OFFHOOK==state){
65. //active
66. Log.i(LOG_TAG,"OFFHOOK");
67.
68. isPhoneCalling=true;
69. }
70.
71. if(TelephonyManager.CALL_STATE_IDLE==state){
72. //runwhenclassinitialandphonecallended,
73. //needdetectflagfromCALL_STATE_OFFHOOK
74. Log.i(LOG_TAG,"IDLE");
75.
76. if(isPhoneCalling){
77.
78. Log.i(LOG_TAG,"restartapp");
79.
80. //restartapp
81. Intenti=getBaseContext().getPackageManager()
82. .getLaunchIntentForPackage(
83. getBaseContext().getPackageName());
84. i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
85. startActivity(i);
86.
87. isPhoneCalling=false;
88. }
89.
90. }
91. }
92. }
93.}
由于PhoneStateListener需要READ_PHONE_STATE权限,需要在AndroidManifest.xml中添加以下代码:
1.name="android.permission.READ_PHONE_STATE"/>
添加后AndroidManifest.xml如下:
1.
xmlversion="1.0"encoding="utf-8"?
>
2.android=""
3. package="net.cublog.android"
4. a