Browse Source

优化代码

liuyuqi-dellpc 7 months ago
parent
commit
5bebae92d4

+ 125 - 0
.idea/workspace.xml

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AutoImportSettings">
+    <option name="autoReloadType" value="NONE" />
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" id="f35aa76e-9291-40bc-827b-5a9e4ae213f0" name="Changes" comment="">
+      <change beforePath="$PROJECT_DIR$/app/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/app/build.gradle" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/src/main/AndroidManifest.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/AndroidManifest.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/src/main/java/com/lyq/autocall/MainActivity.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/lyq/autocall/MainActivity.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/src/main/java/com/lyq/autocall/ManageCall.java" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/lyq/autocall/ManageCall.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/src/main/res/layout/activity_main.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/res/layout/activity_main.xml" afterDir="false" />
+    </list>
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="ExecutionTargetManager" SELECTED_TARGET="device_and_snapshot_combo_box_target[]" />
+  <component name="ExternalProjectsData">
+    <projectState path="$PROJECT_DIR$">
+      <ProjectState />
+    </projectState>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="ProjectId" id="2Vt7Dc0CuW6K5MmvCSoTiWUEqh0" />
+  <component name="ProjectViewState">
+    <option name="autoscrollFromSource" value="true" />
+    <option name="hideEmptyMiddlePackages" value="true" />
+    <option name="showLibraryContents" value="true" />
+    <option name="showVisibilityIcons" value="true" />
+  </component>
+  <component name="PropertiesComponent">
+    <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
+    <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
+    <property name="RunOnceActivity.cidr.known.project.marker" value="true" />
+    <property name="cidr.known.project.marker" value="true" />
+    <property name="dart.analysis.tool.window.visible" value="false" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="show.migrate.to.gradle.popup" value="false" />
+  </component>
+  <component name="RunManager">
+    <configuration name="app" type="AndroidRunConfigurationType" factoryName="Android App">
+      <module name="Backup.app.main" />
+      <option name="DEPLOY" value="true" />
+      <option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
+      <option name="DEPLOY_AS_INSTANT" value="false" />
+      <option name="ARTIFACT_NAME" value="" />
+      <option name="PM_INSTALL_OPTIONS" value="" />
+      <option name="ALL_USERS" value="false" />
+      <option name="ALWAYS_INSTALL_WITH_PM" value="false" />
+      <option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
+      <option name="ACTIVITY_EXTRA_FLAGS" value="" />
+      <option name="MODE" value="default_activity" />
+      <option name="CLEAR_LOGCAT" value="false" />
+      <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
+      <option name="INSPECTION_WITHOUT_ACTIVITY_RESTART" value="false" />
+      <option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
+      <option name="DEBUGGER_TYPE" value="Auto" />
+      <Auto>
+        <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
+        <option name="SHOW_STATIC_VARS" value="true" />
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+        <option name="SHOW_OPTIMIZED_WARNING" value="true" />
+      </Auto>
+      <Hybrid>
+        <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
+        <option name="SHOW_STATIC_VARS" value="true" />
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+        <option name="SHOW_OPTIMIZED_WARNING" value="true" />
+      </Hybrid>
+      <Java />
+      <Native>
+        <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
+        <option name="SHOW_STATIC_VARS" value="true" />
+        <option name="WORKING_DIR" value="" />
+        <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
+        <option name="SHOW_OPTIMIZED_WARNING" value="true" />
+      </Native>
+      <Profilers>
+        <option name="ADVANCED_PROFILING_ENABLED" value="false" />
+        <option name="STARTUP_PROFILING_ENABLED" value="false" />
+        <option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
+        <option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Java/Kotlin Method Sample (legacy)" />
+        <option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
+        <option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
+      </Profilers>
+      <option name="DEEP_LINK" value="" />
+      <option name="ACTIVITY_CLASS" value="" />
+      <option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
+      <option name="SKIP_ACTIVITY_VALIDATION" value="false" />
+      <method v="2">
+        <option name="Android.Gradle.BeforeRunTask" enabled="true" />
+      </method>
+    </configuration>
+    <configuration default="true" type="JetRunConfigurationType">
+      <module name="AutoCall" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration default="true" type="KotlinStandaloneScriptRunConfigurationType">
+      <module name="AutoCall" />
+      <option name="filePath" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+  </component>
+  <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="f35aa76e-9291-40bc-827b-5a9e4ae213f0" name="Changes" comment="" />
+      <created>1695643407919</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1695643407919</updated>
+    </task>
+    <servers />
+  </component>
+</project>

+ 5 - 5
app/build.gradle

@@ -23,12 +23,12 @@ android {
 
 dependencies {
     implementation fileTree(dir: "libs", include: ["*.jar"])
-    
-    implementation 'androidx.appcompat:appcompat:1.5.0'
-    implementation 'com.google.android.material:material:1.6.1'
+
+    implementation 'androidx.appcompat:appcompat:1.6.1'
+    implementation 'com.google.android.material:material:1.9.0'
     implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
     testImplementation 'junit:junit:4.13.2'
-    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
 
 }

+ 3 - 10
app/src/main/AndroidManifest.xml

@@ -1,12 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.lyq.autocall"
-    android:versionCode="1"
-    android:versionName="1.0" >
+    package="com.lyq.autocall">
 
-    <uses-sdk
-        android:minSdkVersion="14"
-        android:targetSdkVersion="19" />
     <!-- 电话服务添加 -->
     <uses-permission android:name="android.permission.CALL_PHONE" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
@@ -14,14 +9,12 @@
     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 
     <application
-        android:allowBackup="true"
         android:icon="@drawable/ic_launcher"
         android:label="@string/app_name"
-        android:theme="@style/AppTheme" >
+        android:theme="@style/AppTheme">
         <activity
-            android:exported="true"
             android:name="com.lyq.autocall.MainActivity"
-            android:label="@string/app_name" >
+            android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 

+ 191 - 191
app/src/main/java/com/lyq/autocall/MainActivity.java

@@ -22,196 +22,196 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 public class MainActivity extends Activity {
-	SharedPreferences sharedPreferences;//保存输入过的号码
-	EditText edt1, edt2;
-	TextView tv1, tv2;
-	Button btn1, btn2, btn3;
-	Thread thread;
-	int repeatCount = 0;
-	int amount;
-	String number, tag = "MainActivity";
-
-	@Override
-	protected void onCreate(Bundle savedInstanceState) {
-		super.onCreate(savedInstanceState);
-		setContentView(R.layout.activity_main);
-		edt1 = (EditText) findViewById(R.id.edittext1);
-		edt2 = (EditText) findViewById(R.id.edittext2);
-		tv1 = (TextView) findViewById(R.id.textview1);
-		tv2 = (TextView) findViewById(R.id.textview2);
-		btn1 = (Button) findViewById(R.id.button1);
-		btn2 = (Button) findViewById(R.id.button2);
-		btn3 = (Button) findViewById(R.id.button3);
-		//声明一个优先级设置 类型,载入配置文件
-		sharedPreferences = getSharedPreferences("phones", MODE_PRIVATE);
-		edt1.setText(sharedPreferences.getString("number", ""));
-		btn1.setOnClickListener(new OnClickListener() {
-
-			@Override
-			public void onClick(View v) {
-				// TODO 自动生成的方法存根
-				if (edt1.getText().toString().trim().length() > 5
-						&& edt2.getText().toString().trim().length() > 0) {
-					//如果输入的是电话号码,则拨打
-					number = edt1.getText().toString().trim();
-					Editor editor = sharedPreferences.edit();
-					editor.putString("number", number);
-					editor.commit();
-					//getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
-					Toast.makeText(getApplicationContext(),
-							"AutoCall现在带您去挂断重拨", Toast.LENGTH_SHORT).show();
-					amount = Integer.parseInt(edt2.getText().toString().trim());
-					end2doCall();
-				} else if (edt1.getText().toString().trim().length() <= 5) {
-					//不拨打,提示输入号码错误
-					Toast.makeText(getApplicationContext(),
-							"检测到输入的非手机号码,傻眼了吧?", Toast.LENGTH_SHORT).show();
-				} else {
-					Toast.makeText(getApplicationContext(), "亲,至少拨打一次呀!",
-							Toast.LENGTH_SHORT).show();
-				}
-
-			}
-		});
-		btn2.setOnClickListener(new OnClickListener() {
-
-			@Override
-			public void onClick(View v) {
-				// TODO 自动生成的方法存根
-				if (edt1.getText().toString().trim().length() > 5
-						&& edt2.getText().toString().trim().length() > 0) {
-					//如果输入的是电话号码,则拨打
-					number = edt1.getText().toString().trim();
-					Editor editor = sharedPreferences.edit();
-					editor.putString("number", number);
-					editor.commit();
-					//getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
-					amount = Integer.parseInt(edt2.getText().toString().trim());
-					if (thread == null) {
-						Toast.makeText(getApplicationContext(),
-								"AutoCall现在带您去自动重拨", Toast.LENGTH_SHORT).show();
-						thread = new Thread(new Runnable() {
-							@Override
-							public void run() {
-								// TODO Auto-generated method stub
-								handler.sendEmptyMessage(0);
-							}
-						});
-						thread.start();
-						Log.i(tag, "thread started");
-					} else {
-						Toast.makeText(getApplicationContext(), "您正在拨打电话呢!",
-								Toast.LENGTH_SHORT).show();
-					}
-					//					autoCall();
-				} else if (edt1.getText().toString().trim().length() <= 5) {
-					//不拨打,提示输入号码错误
-					Toast.makeText(getApplicationContext(),
-							"检测到输入的非手机号码,傻眼了吧?", Toast.LENGTH_SHORT).show();
-				} else {
-					Toast.makeText(getApplicationContext(), "亲,至少拨打一次呀!",
-							Toast.LENGTH_SHORT).show();
-				}
-			}
-		});
-		btn3.setOnClickListener(new OnClickListener() {
-
-			@Override
-			public void onClick(View v) {
-				// TODO 自动生成的方法存根
-				Toast.makeText(getApplicationContext(), "现在停止自动重拨!",
-						Toast.LENGTH_SHORT).show();
-				StopThread();
-				MainActivity.this.finish();
-			}
-		});
-
-	}
-
-	protected void end2doCall() {
-		// TODO 自动生成的方法存根
-
-	}
-
-	Handler handler = new Handler() {
-
-		@SuppressLint("HandlerLeak")
-		@Override
-		public void handleMessage(Message msg) {
-			super.handleMessage(msg);
-			if (repeatCount >= amount) {
-				StopThread();
-				tv2.setText("已拨打次数:\n" + repeatCount + "次");
-
-			} else {
-				RepeatDial();
-				tv2.setText("已拨打次数:\n" + repeatCount + "次");
-			}
-		}
-	};
-
-	private void RepeatDial() {
-		MyPhoneStateListener myPhoneStateListener = new MyPhoneStateListener();//新建一个打电话监听器对象
-		TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);//新建一个电环管理对象
-		telephonyManager.listen(myPhoneStateListener,
-				PhoneStateListener.LISTEN_CALL_STATE);
-	}
-
-	public class MyPhoneStateListener extends PhoneStateListener {
-		@Override
-		public void onCallStateChanged(int state, String phoneNumber) {
-			switch (state) {
-			case TelephonyManager.CALL_STATE_IDLE:
-				if (repeatCount <= amount && thread != null) {
-					repeatCount++;
-					Intent intent = new Intent(Intent.ACTION_CALL,
-							Uri.parse("tel:" + number));
-					startActivity(intent);
-
-					Toast.makeText(MainActivity.this, "正在拨打电话…",
-							Toast.LENGTH_LONG).show();
-				} else {
-					StopThread();
-				}
-				break;
-			case TelephonyManager.CALL_STATE_OFFHOOK:
-				break;
-			case TelephonyManager.CALL_STATE_RINGING:
-				break;
-			default:
-				break;
-			}
-		}
-	}
-
-	/**
-	 * 免提
-	 * 
-	 * @param context
-	 */
-	public void toggleSpeaker(Context context) {
-		AudioManager am = (AudioManager) context
-				.getSystemService(Context.AUDIO_SERVICE);
-		am.setMode(AudioManager.MODE_IN_CALL);
-		am.setSpeakerphoneOn(!am.isSpeakerphoneOn());
-	}
-
-	private void StopThread() {
-		if (thread != null) {
-			//需要调用停止线程的interrupt()方法,因为线程有可能在wait()或sleep(), 提高停止线程的即时性
-			thread.interrupt();
-			//不建议使用			thread.stop();
-			thread = null;
-			Log.i(tag, "thread stoped");
-		}
-	}
-
-	public void autoCall() {
-		//传入服务, parse()解析号码
-		Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"
-				+ number));
-		//通知activtity处理传入的call服务
-		MainActivity.this.startActivity(intent);
-	}
+    SharedPreferences sharedPreferences;//淇濆瓨杈撳叆杩囩殑鍙风爜
+    EditText edt1, edt2;
+    TextView tv1, tv2;
+    Button btn1, btn2, btn3;
+    Thread thread;
+    int repeatCount = 0;
+    int amount;
+    String number, tag = "MainActivity";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+        edt1 = findViewById(R.id.edittext1);
+        edt2 = findViewById(R.id.edittext2);
+        tv1 = findViewById(R.id.textview1);
+        tv2 = findViewById(R.id.textview2);
+        btn1 = findViewById(R.id.button1);
+        btn2 = findViewById(R.id.button2);
+        btn3 = findViewById(R.id.button3);
+        //澹版槑涓€涓�紭鍏堢骇璁剧疆 绫诲瀷锛岃浇鍏ラ厤缃�枃浠�
+        sharedPreferences = getSharedPreferences("phones", MODE_PRIVATE);
+        edt1.setText(sharedPreferences.getString("number", ""));
+        btn1.setOnClickListener(new OnClickListener() {
+
+            @Override
+            public void onClick(View v) {
+                // TODO 鑷�姩鐢熸垚鐨勬柟娉曞瓨鏍�
+                if (edt1.getText().toString().trim().length() > 5
+                        && edt2.getText().toString().trim().length() > 0) {
+                    //濡傛灉杈撳叆鐨勬槸鐢佃瘽鍙风爜锛屽垯鎷ㄦ墦
+                    number = edt1.getText().toString().trim();
+                    Editor editor = sharedPreferences.edit();
+                    editor.putString("number", number);
+                    editor.commit();
+                    //getString()绗�簩涓�弬鏁颁负缂虹渷鍊硷紝濡傛灉preference涓�笉瀛樺湪璇�ey锛屽皢杩斿洖缂虹渷鍊�
+                    Toast.makeText(getApplicationContext(),
+                            "AutoCall鐜板湪甯︽偍鍘绘寕鏂�噸鎷�", Toast.LENGTH_SHORT).show();
+                    amount = Integer.parseInt(edt2.getText().toString().trim());
+                    end2doCall();
+                } else if (edt1.getText().toString().trim().length() <= 5) {
+                    //涓嶆嫧鎵擄紝鎻愮ず杈撳叆鍙风爜閿欒�
+                    Toast.makeText(getApplicationContext(),
+                            "妫€娴嬪埌杈撳叆鐨勯潪鎵嬫満鍙风爜锛屽偦鐪间簡鍚э紵", Toast.LENGTH_SHORT).show();
+                } else {
+                    Toast.makeText(getApplicationContext(), "浜诧紝鑷冲皯鎷ㄦ墦涓€娆″憖锛�",
+                            Toast.LENGTH_SHORT).show();
+                }
+
+            }
+        });
+        btn2.setOnClickListener(new OnClickListener() {
+
+            @Override
+            public void onClick(View v) {
+                // TODO 鑷�姩鐢熸垚鐨勬柟娉曞瓨鏍�
+                if (edt1.getText().toString().trim().length() > 5
+                        && edt2.getText().toString().trim().length() > 0) {
+                    //濡傛灉杈撳叆鐨勬槸鐢佃瘽鍙风爜锛屽垯鎷ㄦ墦
+                    number = edt1.getText().toString().trim();
+                    Editor editor = sharedPreferences.edit();
+                    editor.putString("number", number);
+                    editor.commit();
+                    //getString()绗�簩涓�弬鏁颁负缂虹渷鍊硷紝濡傛灉preference涓�笉瀛樺湪璇�ey锛屽皢杩斿洖缂虹渷鍊�
+                    amount = Integer.parseInt(edt2.getText().toString().trim());
+                    if (thread == null) {
+                        Toast.makeText(getApplicationContext(),
+                                "AutoCall鐜板湪甯︽偍鍘昏嚜鍔ㄩ噸鎷�", Toast.LENGTH_SHORT).show();
+                        thread = new Thread(new Runnable() {
+                            @Override
+                            public void run() {
+                                // TODO Auto-generated method stub
+                                handler.sendEmptyMessage(0);
+                            }
+                        });
+                        thread.start();
+                        Log.i(tag, "thread started");
+                    } else {
+                        Toast.makeText(getApplicationContext(), "鎮ㄦ�鍦ㄦ嫧鎵撶數璇濆憿锛�",
+                                Toast.LENGTH_SHORT).show();
+                    }
+                    //					autoCall();
+                } else if (edt1.getText().toString().trim().length() <= 5) {
+                    //涓嶆嫧鎵擄紝鎻愮ず杈撳叆鍙风爜閿欒�
+                    Toast.makeText(getApplicationContext(),
+                            "妫€娴嬪埌杈撳叆鐨勯潪鎵嬫満鍙风爜锛屽偦鐪间簡鍚э紵", Toast.LENGTH_SHORT).show();
+                } else {
+                    Toast.makeText(getApplicationContext(), "浜诧紝鑷冲皯鎷ㄦ墦涓€娆″憖锛�",
+                            Toast.LENGTH_SHORT).show();
+                }
+            }
+        });
+        btn3.setOnClickListener(new OnClickListener() {
+
+            @Override
+            public void onClick(View v) {
+                // TODO 鑷�姩鐢熸垚鐨勬柟娉曞瓨鏍�
+                Toast.makeText(getApplicationContext(), "鐜板湪鍋滄�鑷�姩閲嶆嫧锛�",
+                        Toast.LENGTH_SHORT).show();
+                StopThread();
+                MainActivity.this.finish();
+            }
+        });
+
+    }
+
+    protected void end2doCall() {
+        // TODO 鑷�姩鐢熸垚鐨勬柟娉曞瓨鏍�
+
+    }
+
+    Handler handler = new Handler() {
+
+        @SuppressLint("HandlerLeak")
+        @Override
+        public void handleMessage(Message msg) {
+            super.handleMessage(msg);
+            if (repeatCount >= amount) {
+                StopThread();
+                tv2.setText("宸叉嫧鎵撴�鏁帮細\n" + repeatCount + "娆�");
+
+            } else {
+                RepeatDial();
+                tv2.setText("宸叉嫧鎵撴�鏁帮細\n" + repeatCount + "娆�");
+            }
+        }
+    };
+
+    private void RepeatDial() {
+        MyPhoneStateListener myPhoneStateListener = new MyPhoneStateListener();//鏂板缓涓€涓�墦鐢佃瘽鐩戝惉鍣ㄥ�璞�
+        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);//鏂板缓涓€涓�數鐜��鐞嗗�璞�
+        telephonyManager.listen(myPhoneStateListener,
+                PhoneStateListener.LISTEN_CALL_STATE);
+    }
+
+    public class MyPhoneStateListener extends PhoneStateListener {
+        @Override
+        public void onCallStateChanged(int state, String phoneNumber) {
+            switch (state) {
+                case TelephonyManager.CALL_STATE_IDLE:
+                    if (repeatCount <= amount && thread != null) {
+                        repeatCount++;
+                        Intent intent = new Intent(Intent.ACTION_CALL,
+                                Uri.parse("tel:" + number));
+                        startActivity(intent);
+
+                        Toast.makeText(MainActivity.this, "姝e湪鎷ㄦ墦鐢佃瘽鈥�",
+                                Toast.LENGTH_LONG).show();
+                    } else {
+                        StopThread();
+                    }
+                    break;
+                case TelephonyManager.CALL_STATE_OFFHOOK:
+                    break;
+                case TelephonyManager.CALL_STATE_RINGING:
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
+
+    /**
+     * 鍏嶆彁
+     *
+     * @param context
+     */
+    public void toggleSpeaker(Context context) {
+        AudioManager am = (AudioManager) context
+                .getSystemService(Context.AUDIO_SERVICE);
+        am.setMode(AudioManager.MODE_IN_CALL);
+        am.setSpeakerphoneOn(!am.isSpeakerphoneOn());
+    }
+
+    private void StopThread() {
+        if (thread != null) {
+            //闇€瑕佽皟鐢ㄥ仠姝㈢嚎绋嬬殑interrupt()鏂规硶锛屽洜涓虹嚎绋嬫湁鍙�兘鍦╳ait()鎴杝leep(), 鎻愰珮鍋滄�绾跨▼鐨勫嵆鏃舵€�
+            thread.interrupt();
+            //涓嶅缓璁�娇鐢�			thread.stop();
+            thread = null;
+            Log.i(tag, "thread stoped");
+        }
+    }
+
+    public void autoCall() {
+        //浼犲叆鏈嶅姟锛� parse锛堬級瑙f瀽鍙风爜
+        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"
+                + number));
+        //閫氱煡activtity澶勭悊浼犲叆鐨刢all鏈嶅姟
+        MainActivity.this.startActivity(intent);
+    }
 
 }

+ 3 - 3
app/src/main/java/com/lyq/autocall/ManageCall.java

@@ -8,7 +8,7 @@ public class ManageCall {
 	private Context mContext;
 	private int currVolume;
 
-	//´ò¿ªÑïÉùÆ÷
+	//打开扬声器
 	public void OpenSpeaker() {
 
 		try {
@@ -34,7 +34,7 @@ public class ManageCall {
 		}
 	}
 
-	//¹Ø±ÕÑïÉùÆ÷
+	//关闭扬声器
 	public void CloseSpeaker() {
 
 		try {
@@ -51,6 +51,6 @@ public class ManageCall {
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
-		//Toast.makeText(context,"“P•Æ÷Òѽ›êPé]",Toast.LENGTH_SHORT).show();
+		//Toast.makeText(context,"��器已經關閉",Toast.LENGTH_SHORT).show();
 	}
 }

+ 2 - 6
app/src/main/res/layout/activity_main.xml

@@ -1,8 +1,6 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context="${packageName}.${activityClass}" >
+    android:layout_height="match_parent">
 
     <TextView
         android:id="@+id/textview1"
@@ -63,7 +61,7 @@
         android:layout_below="@+id/checkBox1"
         android:layout_centerVertical="true"
         android:gravity="center"
-        android:orientation="horizontal" >
+        android:orientation="horizontal">
 
         <Button
             android:id="@+id/button1"
@@ -85,7 +83,6 @@
     </LinearLayout>
 
     <Button
-        android:id="@+id/button3"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_below="@+id/linearLayout1"
@@ -97,7 +94,6 @@
         android:id="@+id/button4"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_below="@+id/button3"
         android:layout_centerHorizontal="true"
         android:background="#86efb2"
         android:text="自动重拨(实用):拨打未通则继续打. " />