liuyuqi-dellpc 4 years ago
commit
65f4688487
70 changed files with 3495 additions and 0 deletions
  1. 9 0
      .classpath
  2. 3 0
      .gitignore
  3. 33 0
      .project
  4. BIN
      1.png
  5. 42 0
      AndroidManifest.xml
  6. 2 0
      default.properties
  7. 14 0
      project.properties
  8. BIN
      res/drawable-hdpi/app_logo.png
  9. BIN
      res/drawable-hdpi/background_black.png
  10. BIN
      res/drawable-hdpi/background_coffee.jpg
  11. BIN
      res/drawable-hdpi/background_other.jpg
  12. BIN
      res/drawable-hdpi/background_pure.jpg
  13. BIN
      res/drawable-hdpi/menu_call.png
  14. BIN
      res/drawable-hdpi/menu_call_press.png
  15. 11 0
      res/drawable-hdpi/menu_call_selector.xml
  16. BIN
      res/drawable-hdpi/menu_message.png
  17. BIN
      res/drawable-hdpi/menu_message_press.png
  18. 11 0
      res/drawable-hdpi/menu_message_selector.xml
  19. BIN
      res/drawable-hdpi/menu_phone.png
  20. BIN
      res/drawable-hdpi/menu_phone_press.png
  21. 11 0
      res/drawable-hdpi/menu_phone_selector.xml
  22. BIN
      res/drawable-hdpi/menu_set.png
  23. BIN
      res/drawable-hdpi/menu_set_press.png
  24. 11 0
      res/drawable-hdpi/menu_set_selector.xml
  25. BIN
      res/drawable-hdpi/menu_smart.png
  26. BIN
      res/drawable-hdpi/menu_smart_press.png
  27. 11 0
      res/drawable-hdpi/menu_smart_selector.xml
  28. BIN
      res/drawable-hdpi/menu_state.png
  29. BIN
      res/drawable-hdpi/menu_state_press.png
  30. 11 0
      res/drawable-hdpi/menu_state_selector.xml
  31. BIN
      res/drawable-hdpi/spliding_close.png
  32. BIN
      res/drawable-hdpi/spliding_open.png
  33. BIN
      res/drawable-hdpi/tab_icon_1.png
  34. BIN
      res/drawable-hdpi/tab_icon_2.png
  35. BIN
      res/drawable-ldpi/icon.png
  36. BIN
      res/drawable-mdpi/icon.png
  37. 15 0
      res/layout/getback_pw_by_question.xml
  38. 57 0
      res/layout/intellect.xml
  39. 44 0
      res/layout/main.xml
  40. 12 0
      res/layout/main_audio_change.xml
  41. 16 0
      res/layout/message_forbid_add.xml
  42. 18 0
      res/layout/message_rubbish_templet.xml
  43. 16 0
      res/layout/protected_password_confirm.xml
  44. 14 0
      res/layout/searchphone.xml
  45. 7 0
      res/layout/set_call_record_name.xml
  46. 31 0
      res/layout/set_listview.xml
  47. 12 0
      res/layout/set_protected.xml
  48. 6 0
      res/layout/set_sensitive.xml
  49. 13 0
      res/layout/set_sensitive_add.xml
  50. 24 0
      res/layout/set_undisturbed.xml
  51. 30 0
      res/layout/tabhost_public.xml
  52. 11 0
      res/values/strings.xml
  53. 47 0
      src/com/android/internal/telephony/ITelephony.aidl
  54. BIN
      src/com/android/internal/telephony/vssver2.scc
  55. 226 0
      src/com/ldci/t56/mobile/db/DbAdapter.java
  56. 26 0
      src/com/ldci/t56/mobile/handler/PhoneNumberXml.java
  57. 15 0
      src/com/ldci/t56/mobile/info/Call_Forbid_Info.java
  58. 25 0
      src/com/ldci/t56/mobile/info/Call_Record_Info.java
  59. 15 0
      src/com/ldci/t56/mobile/info/Message_Forbid_Info.java
  60. 25 0
      src/com/ldci/t56/mobile/info/Message_Rubbish_Info.java
  61. 31 0
      src/com/ldci/t56/mobile/info/PhoneInfo.java
  62. 40 0
      src/com/ldci/t56/mobile/info/SmsInfo.java
  63. 517 0
      src/com/ldci/t56/mobile/safe/CallActivity.java
  64. 455 0
      src/com/ldci/t56/mobile/safe/MainActivity.java
  65. 562 0
      src/com/ldci/t56/mobile/safe/MessageActivity.java
  66. 188 0
      src/com/ldci/t56/mobile/safe/SensitiveActivity.java
  67. 312 0
      src/com/ldci/t56/mobile/safe/SetActivity.java
  68. 419 0
      src/com/ldci/t56/mobile/tool/BroadCastTool.java
  69. 29 0
      src/com/ldci/t56/mobile/tool/GetCurrentTime.java
  70. 68 0
      src/com/ldci/t56/mobile/tool/ServiceTool.java

+ 9 - 0
.classpath

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="gen"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
+	<classpathentry kind="output" path="bin/classes"/>
+</classpath>

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+/bin
+/gen
+/.settings

+ 33 - 0
.project

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>365MobileSecretary v1.0.6</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

BIN
1.png


+ 42 - 0
AndroidManifest.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+	package="com.ldci.t56.mobile.safe" android:versionCode="1"
+	android:versionName="1.0">
+	<application android:icon="@drawable/app_logo"
+		android:label="@string/app_name">
+		<activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden" android:screenOrientation="portrait">
+			<intent-filter>
+				<action android:name="android.intent.action.MAIN" />
+				<category android:name="android.intent.category.LAUNCHER" />
+			</intent-filter>
+		</activity>
+		<activity android:name=".MessageActivity" android:configChanges="orientation|keyboardHidden"></activity>
+		<activity android:name=".CallActivity" android:configChanges="orientation|keyboardHidden"></activity>
+		<activity android:name=".SetActivity" android:configChanges="orientation|keyboardHidden"></activity>
+		<activity android:name=".SensitiveActivity" android:configChanges="orientation|keyboardHidden"></activity>
+		<receiver android:name="com.ldci.t56.mobile.tool.BroadCastTool">
+			<intent-filter android:priority="20"><!-- 设置该广播接收类的优先级为20,跟主页面的优先级差不多 -->
+				<action android:name="android.provider.Telephony.SMS_RECEIVED" />
+				<action android:name="android.intent.action.BOOT_COMPLETED" />
+				<action android:name="android.intent.action.PHONE_STATE" />
+				<action android:name="com.ldci.android.t56.mobile.safe.AUTO_START" />
+			</intent-filter>
+		</receiver>
+		<service android:name="com.ldci.t56.mobile.tool.ServiceTool">
+			<intent-filter>
+				<action android:name="com.ldci.t56.mobile.safe.AUTO_START_SERVICE" />
+				<category android:name="android.intent.category.DEFAULT" />
+			</intent-filter>
+		</service>
+	</application>
+	<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
+	<uses-permission android:name="android.permission.RECEIVE_BOOT_CPMPLETED"></uses-permission>
+	<uses-permission android:name="android.permission.INTERNET"></uses-permission>
+	<uses-permission android:name="android.permission.CALL_PHONE"/>
+	<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+	<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
+	<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
+	<uses-permission android:name="android.permission.READ_SMS"></uses-permission>
+	<uses-permission android:name="android.permission.WRITE_SMS"></uses-permission>
+<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
+</manifest> 

+ 2 - 0
default.properties

@@ -0,0 +1,2 @@
+# Project target.
+target=android-10

+ 14 - 0
project.properties

@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-10

BIN
res/drawable-hdpi/app_logo.png


BIN
res/drawable-hdpi/background_black.png


BIN
res/drawable-hdpi/background_coffee.jpg


BIN
res/drawable-hdpi/background_other.jpg


BIN
res/drawable-hdpi/background_pure.jpg


BIN
res/drawable-hdpi/menu_call.png


BIN
res/drawable-hdpi/menu_call_press.png


+ 11 - 0
res/drawable-hdpi/menu_call_selector.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<selector
+  xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true"
+    android:drawable="@drawable/menu_call_press" />
+    <item android:state_focused="true"
+    android:state_enabled="true"
+    android:drawable="@drawable/menu_call_press" />
+    <item android:state_enabled="true"
+    android:drawable="@drawable/menu_call" />
+</selector>

BIN
res/drawable-hdpi/menu_message.png


BIN
res/drawable-hdpi/menu_message_press.png


+ 11 - 0
res/drawable-hdpi/menu_message_selector.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<selector
+  xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true"
+    android:drawable="@drawable/menu_message_press" />
+    <item android:state_focused="true"
+    android:state_enabled="true"
+    android:drawable="@drawable/menu_message_press" />
+    <item android:state_enabled="true"
+    android:drawable="@drawable/menu_message" />
+</selector>

BIN
res/drawable-hdpi/menu_phone.png


BIN
res/drawable-hdpi/menu_phone_press.png


+ 11 - 0
res/drawable-hdpi/menu_phone_selector.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<selector
+  xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true"
+    android:drawable="@drawable/menu_phone_press" />
+    <item android:state_focused="true"
+    android:state_enabled="true"
+    android:drawable="@drawable/menu_phone_press" />
+    <item android:state_enabled="true"
+    android:drawable="@drawable/menu_phone" />
+</selector>

BIN
res/drawable-hdpi/menu_set.png


BIN
res/drawable-hdpi/menu_set_press.png


+ 11 - 0
res/drawable-hdpi/menu_set_selector.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<selector
+  xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true"
+    android:drawable="@drawable/menu_set_press" />
+    <item android:state_focused="true"
+    android:state_enabled="true"
+    android:drawable="@drawable/menu_set_press" />
+    <item android:state_enabled="true"
+    android:drawable="@drawable/menu_set" />
+</selector>

BIN
res/drawable-hdpi/menu_smart.png


BIN
res/drawable-hdpi/menu_smart_press.png


+ 11 - 0
res/drawable-hdpi/menu_smart_selector.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<selector
+  xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true"
+    android:drawable="@drawable/menu_smart_press" />
+    <item android:state_focused="true"
+    android:state_enabled="true"
+    android:drawable="@drawable/menu_smart_press" />
+    <item android:state_enabled="true"
+    android:drawable="@drawable/menu_smart" />
+</selector>

BIN
res/drawable-hdpi/menu_state.png


BIN
res/drawable-hdpi/menu_state_press.png


+ 11 - 0
res/drawable-hdpi/menu_state_selector.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<selector
+  xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true"
+    android:drawable="@drawable/menu_state_press" />
+    <item android:state_focused="true"
+    android:state_enabled="true"
+    android:drawable="@drawable/menu_state_press" />
+    <item android:state_enabled="true"
+    android:drawable="@drawable/menu_state" />
+</selector>

BIN
res/drawable-hdpi/spliding_close.png


BIN
res/drawable-hdpi/spliding_open.png


BIN
res/drawable-hdpi/tab_icon_1.png


BIN
res/drawable-hdpi/tab_icon_2.png


BIN
res/drawable-ldpi/icon.png


BIN
res/drawable-mdpi/icon.png


+ 15 - 0
res/layout/getback_pw_by_question.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+	android:layout_width="fill_parent" android:layout_height="wrap_content"
+	android:orientation="vertical">
+	<EditText android:id="@+id/getback_pw_question"
+		android:layout_width="fill_parent"
+		android:layout_height="wrap_content" android:singleLine="true"
+		android:hint="您的密码取回问题">
+	</EditText>
+	<EditText android:id="@+id/getback_pw_answer"
+		android:layout_width="fill_parent"
+		android:layout_height="wrap_content" android:singleLine="true"
+		android:hint="您的密码取回答案">
+	</EditText>
+</LinearLayout>

+ 57 - 0
res/layout/intellect.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+	android:orientation="vertical" android:layout_width="fill_parent"
+	android:layout_height="fill_parent">
+	<TextView android:id="@+id/intell_text1_textview"
+		android:padding="10dip" android:layout_width="wrap_content"
+		android:textSize="20sp" android:layout_height="wrap_content"
+		android:layout_alignParentLeft="true" android:text="@string/intellectreceiveSMS" />
+	<CheckBox android:id="@+id/intellect_checbox_1"
+		android:layout_alignTop="@+id/intell_text1_textview"
+		android:layout_width="wrap_content" android:layout_height="wrap_content"
+		android:layout_alignParentRight="true" />
+
+	<TextView android:id="@+id/intell_text2_textview"
+		android:textSize="20sp" android:layout_below="@+id/intell_text1_textview"
+		android:padding="10dip" android:layout_width="wrap_content"
+		android:layout_height="wrap_content" android:layout_alignParentLeft="true"
+		android:text="@string/intellectreceivePHONE" />
+	<CheckBox android:id="@+id/intellect_checbox_2"
+		android:layout_alignTop="@+id/intell_text2_textview"
+		android:layout_width="wrap_content" android:layout_height="wrap_content"
+		android:layout_alignParentRight="true" />
+
+	<TextView android:id="@+id/intell_text3_textview"
+		android:textSize="20sp" android:layout_below="@+id/intell_text2_textview"
+		android:padding="10dip" android:layout_width="wrap_content"
+		android:layout_height="wrap_content" android:layout_alignParentLeft="true"
+		android:text="@string/intellectPHONERECEIVE" />
+	<CheckBox android:id="@+id/intellect_checbox_3"
+		android:layout_alignTop="@+id/intell_text3_textview"
+		android:layout_width="wrap_content" android:layout_height="wrap_content"
+		android:layout_alignParentRight="true" />
+
+	<TextView android:id="@+id/intell_text4_textview"
+		android:textSize="20sp" android:layout_below="@+id/intell_text3_textview"
+		android:padding="10dip" android:layout_width="wrap_content"
+		android:layout_height="wrap_content" android:layout_alignParentLeft="true"
+		android:text="@string/SMScommend" />
+	<EditText android:id="@+id/intellect_edittext01"
+		android:layout_alignTop="@+id/intell_text4_textview"
+		android:layout_toRightOf="@+id/intell_text4_textview"
+		android:layout_width="wrap_content" android:layout_height="wrap_content"
+		android:layout_alignParentRight="true" android:singleLine="true"
+		android:visibility="gone" />
+
+	<TextView android:id="@+id/intell_text5_textview"
+		android:textSize="20sp" android:layout_below="@+id/intell_text4_textview"
+		android:padding="10dip" android:layout_width="wrap_content"
+		android:layout_height="wrap_content" android:layout_alignParentLeft="true"
+		android:text="@string/PHONEcommend" />
+	<EditText android:id="@+id/intellect_edittext02"
+		android:layout_alignTop="@+id/intell_text5_textview"
+		android:layout_toRightOf="@+id/intell_text5_textview"
+		android:layout_width="wrap_content" android:layout_height="wrap_content"
+		android:layout_alignParentRight="true" android:singleLine="true"
+		android:visibility="gone" />
+</RelativeLayout>

+ 44 - 0
res/layout/main.xml

@@ -0,0 +1,44 @@
+<?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" android:background="@drawable/background_pure">
+<TextView  
+	android:id="@+id/menu_title"
+    android:layout_width="fill_parent" 
+    android:layout_height="wrap_content" 
+    android:gravity="center"
+    android:textSize="20dip" 
+    android:textColor="#1A1A1A"/>
+
+<ImageButton android:id="@+id/ImageView01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/menu_message_selector" android:layout_marginLeft="30dp" android:layout_marginRight="30dp"></ImageButton>
+<ImageButton android:id="@+id/ImageView02" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/menu_call_selector" android:layout_marginLeft="30dp" android:layout_marginRight="30dp"></ImageButton>
+<ImageButton android:id="@+id/ImageView03" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/menu_phone_selector" android:layout_marginRight="30dp" android:layout_marginLeft="30dp"></ImageButton>
+
+
+<SlidingDrawer android:id="@+id/menu_sliding"
+		android:layout_width="fill_parent"
+		android:layout_height="fill_parent"
+		android:handle="@+id/linearlayout_image"
+		android:content="@+id/linearlayout_menu_other"
+		android:orientation="vertical">
+		<LinearLayout android:id="@+id/linearlayout_image"
+				android:layout_width="fill_parent"
+				android:layout_height="35px"
+				android:gravity="center">
+				<ImageView android:id="@+id/sliding_image"
+						android:layout_width="wrap_content"
+						android:layout_height="wrap_content"
+						android:src="@drawable/spliding_open"></ImageView>
+		</LinearLayout>
+		<LinearLayout android:id="@+id/linearlayout_menu_other"
+				android:layout_width="fill_parent"
+				android:layout_height="fill_parent"
+				android:orientation="vertical"
+				android:gravity="center">
+				<ImageButton android:id="@+id/ImageView04" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/menu_state_selector" android:layout_marginRight="30dp" android:layout_marginLeft="30dp"></ImageButton>
+				<ImageButton android:id="@+id/ImageView05" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/menu_smart_selector" android:layout_marginRight="30dp" android:layout_marginLeft="30dp"></ImageButton>
+				<ImageButton android:id="@+id/ImageView06" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/menu_set_selector" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" ></ImageButton>
+		</LinearLayout>
+</SlidingDrawer>
+</LinearLayout>

+ 12 - 0
res/layout/main_audio_change.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  android:layout_width="fill_parent"
+  android:layout_height="wrap_content"
+  android:orientation="vertical">
+  
+<EditText android:id="@+id/edit_qingjing_ms" android:layout_height="wrap_content" android:layout_width="fill_parent" android:hint="请输入情景模式指令" android:singleLine="true"></EditText>
+<EditText android:id="@+id/edit_qingjing_jy" android:layout_height="wrap_content" android:layout_width="fill_parent" android:hint="请输入静音模式指令" android:singleLine="true"></EditText>
+<EditText android:id="@+id/edit_qingjing_zd" android:layout_height="wrap_content" android:layout_width="fill_parent" android:hint="请输入振动模式指令" android:singleLine="true"></EditText>
+<EditText android:id="@+id/edit_qingjing_xl" android:layout_height="wrap_content" android:layout_width="fill_parent" android:hint="请输入响铃模式指令" android:singleLine="true"></EditText>
+</LinearLayout>

+ 16 - 0
res/layout/message_forbid_add.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+	android:layout_width="fill_parent"
+	android:layout_height="wrap_content">
+
+	<EditText android:layout_alignParentLeft="true"
+		android:layout_toLeftOf="@+id/get_system_contact"
+		android:id="@+id/new_forbid_phone" android:layout_width="wrap_content"
+		android:layout_height="wrap_content" android:hint="请输入11位手机号码" android:singleLine="true" android:numeric="integer">
+	</EditText>
+	<Button android:id="@+id/get_system_contact"
+		android:layout_alignParentRight="true"
+		android:layout_height="wrap_content"
+		android:text="联系人" android:layout_width="100sp">
+	</Button>
+</RelativeLayout>

+ 18 - 0
res/layout/message_rubbish_templet.xml

@@ -0,0 +1,18 @@
+<?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="50dp" android:gravity="center">
+  <LinearLayout
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  android:layout_width="fill_parent" android:layout_height="25dp" android:gravity="center">
+    <TextView android:id="@+id/phone"
+    	android:layout_height="25dp"
+		android:layout_width="fill_parent" android:gravity="left|center" android:layout_weight="1" android:textSize="22dp"></TextView>
+	<TextView android:id="@+id/time"
+    	android:layout_width="fill_parent" android:gravity="right|center" android:layout_weight="1" android:layout_height="20dp"></TextView>
+  </LinearLayout>
+    <TextView android:id="@+id/content"
+    	android:layout_height="25dp"
+		android:layout_width="fill_parent" android:gravity="left|center" android:textSize="20dp"></TextView>
+</LinearLayout>

+ 16 - 0
res/layout/protected_password_confirm.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+	android:layout_width="fill_parent"
+	android:layout_height="wrap_content" android:gravity="center_horizontal">
+
+	<EditText android:layout_alignParentLeft="true"
+		android:layout_toLeftOf="@+id/protected_forget_pw"
+		android:id="@+id/protected_enter_pw" android:layout_width="wrap_content"
+		android:layout_height="wrap_content" android:hint="请输入密码" android:singleLine="true" android:layout_marginLeft="10dp" android:layout_marginRight="10dp">
+	</EditText>
+	<TextView android:id="@+id/protected_forget_pw"
+		android:layout_alignParentRight="true"
+		android:layout_height="wrap_content"
+		android:layout_width="100sp" android:textSize="20dp" android:textColor="#EE3B3B" android:paddingTop="8dp" android:text="忘记密码">
+	</TextView>
+</RelativeLayout>

+ 14 - 0
res/layout/searchphone.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  android:layout_width="fill_parent"
+  android:layout_height="fill_parent"
+  android:orientation="vertical">
+ `<EditText
+ 	android:hint="@string/phonenumber"
+ 	android:layout_width="fill_parent"
+  	android:layout_height="wrap_content"
+  	android:id="@+id/phonenumber"
+  	android:singleLine="true"
+  android:numeric="integer"/>
+</LinearLayout>

+ 7 - 0
res/layout/set_call_record_name.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="vertical">
+<EditText  android:id="@+id/EditText01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入姓名" android:singleLine="true"></EditText>
+<EditText  android:id="@+id/EditText02" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入号码" android:singleLine="true" android:numeric="integer"></EditText>
+</LinearLayout>

+ 31 - 0
res/layout/set_listview.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  android:id="@+id/set_relativelayout"
+  android:layout_width="fill_parent"
+  android:layout_height="wrap_content"
+  android:orientation="horizontal" android:gravity="left">
+<LinearLayout
+  android:id="@+id/set_linearlayout"
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content">
+  <TextView
+  	android:id="@+id/set_title" 
+  	android:layout_width="fill_parent"
+  	android:layout_height="wrap_content"
+  	android:textAppearance="?android:attr/textAppearanceLarge"
+  	></TextView>
+  	<TextView
+  	android:id="@+id/set_content" 
+  	android:layout_width="fill_parent"
+  	android:layout_height="wrap_content"
+  	android:textAppearance="?android:attr/textAppearanceSmall"
+  	></TextView>
+</LinearLayout>
+
+<CheckBox
+  android:id="@+id/set_checkbox"
+  android:layout_alignParentRight="true"
+  android:layout_height="wrap_content" android:layout_width="wrap_content"></CheckBox>
+
+</RelativeLayout>

+ 12 - 0
res/layout/set_protected.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  android:layout_width="fill_parent"
+  android:layout_height="wrap_content"
+  android:orientation="vertical">
+  
+<EditText android:hint="请输入密码" android:id="@+id/protected_pw_enter" android:layout_width="fill_parent" android:layout_height="wrap_content" android:singleLine="true" android:password="true"></EditText>
+<EditText android:hint="请确认密码" android:id="@+id/protected_pw_confirm" android:layout_width="fill_parent" android:layout_height="wrap_content" android:password="true" android:singleLine="true"></EditText>
+<EditText android:id="@+id/protected_pw_question" android:layout_width="fill_parent" android:layout_height="wrap_content" android:singleLine="true" android:hint="自定义您的密码取回问题"></EditText>
+<EditText android:id="@+id/protected_pw_answer" android:layout_width="fill_parent" android:layout_height="wrap_content" android:singleLine="true" android:hint="自定义您的密码取回答案"></EditText>
+</LinearLayout>

+ 6 - 0
res/layout/set_sensitive.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ListView
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  android:layout_width="fill_parent"
+  android:layout_height="fill_parent">
+</ListView>

+ 13 - 0
res/layout/set_sensitive_add.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+  xmlns:android="http://schemas.android.com/apk/res/android"
+  android:layout_width="fill_parent"
+  android:layout_height="wrap_content">
+  
+<EditText android:hint="请输入新敏感词" 
+	android:id="@+id/set_sensitive_add" 
+	android:layout_width="fill_parent" 
+	android:layout_height="wrap_content"
+	android:singleLine="true" />
+
+</LinearLayout>

+ 24 - 0
res/layout/set_undisturbed.xml

@@ -0,0 +1,24 @@
+<LinearLayout 
+	android:id="@+id/LinearLayout01" 
+	android:layout_width="fill_parent" 
+	android:layout_height="fill_parent" 
+	xmlns:android="http://schemas.android.com/apk/res/android">
+	<RadioGroup android:id="@+id/RadioGroup01" 
+	android:orientation="vertical"
+	android:layout_width="fill_parent" 
+	android:layout_height="wrap_content">
+		<RadioButton android:id="@+id/RadioButton01" 
+			android:layout_width="fill_parent" 
+			android:layout_height="wrap_content" android:text="拦截短信"></RadioButton>
+		<RadioButton 
+			android:id="@+id/RadioButton02" 
+			android:layout_width="fill_parent" 
+			android:layout_height="wrap_content" android:text="拦截电话"></RadioButton>
+		<RadioButton android:id="@+id/RadioButton03" 
+			android:layout_width="fill_parent" 
+			android:layout_height="wrap_content" android:text="拦截短信和电话"></RadioButton>
+		<RadioButton android:id="@+id/RadioButton04" 
+			android:layout_width="fill_parent" 
+			android:layout_height="wrap_content" android:text="关闭"></RadioButton>
+	</RadioGroup>
+</LinearLayout>

+ 30 - 0
res/layout/tabhost_public.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TabHost
+  	xmlns:android="http://schemas.android.com/apk/res/android"
+  	android:id="@android:id/tabhost"
+  	android:layout_width="fill_parent"
+  	android:layout_height="fill_parent">
+<LinearLayout android:id="@+id/LinearLayout" 
+	android:layout_width="fill_parent" 
+	android:layout_height="fill_parent"
+	android:orientation="vertical"
+	android:background="#919191">  
+<TabWidget
+	android:id="@android:id/tabs"
+	android:layout_width="fill_parent"
+  	android:layout_height="wrap_content"/>  
+<FrameLayout
+  	android:id="@android:id/tabcontent"
+  	android:layout_width="fill_parent"
+  	android:layout_height="fill_parent" >
+  <ListView android:id="@+id/tabhost_public_listview"
+  		android:layout_width="fill_parent"
+  		android:layout_height="fill_parent">
+  </ListView>
+  <ListView android:id="@+id/tabhost_public_listview_tab2"
+  		android:layout_width="fill_parent"
+  		android:layout_height="fill_parent">
+  </ListView>
+</FrameLayout>
+</LinearLayout>
+</TabHost>

+ 11 - 0
res/values/strings.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+	<string name="app_name">365手机秘书</string>
+	<string name="intellectSet">智能收发设置</string>
+	<string name="intellectreceiveSMS">智能接收短信</string>
+	<string name="intellectreceivePHONE">智能接收来电</string>
+	<string name="intellectPHONERECEIVE">电话留言</string>
+	<string name="phonenumber">请输入手机号码</string>
+	<string name="SMScommend">短信接收指令:</string>
+	<string name="PHONEcommend">来电接收指令:</string>
+</resources>

+ 47 - 0
src/com/android/internal/telephony/ITelephony.aidl

@@ -0,0 +1,47 @@
+package com.android.internal.telephony;  
+ /**  
+  * Interface used to interact with the phone.  Mostly this is used by the  
+  * TelephonyManager class.  A few places are still using this directly.  
+  * Please clean them up if possible and use TelephonyManager instead.  
+  * {@hide}  
+  */ 
+
+interface ITelephony {      
+ /**      
+  * End call or go to the Home screen
+  * @return whether it hung up     
+  */    
+	boolean endCall();      
+   
+   /**      
+    * Answer the currently-ringing call.      
+    *      
+    * If there's already a current active call, that call will be      
+    * automatically put on hold.  If both lines are currently in use, the     
+    * current active call will be ended.      
+    *    
+    * TODO: provide a flag to let the caller specify what policy to use     
+    * if both lines are in use.  (The current behavior is hardwired to     
+    * "answer incoming, end ongoing", which is how the CALL button      
+    * is specced to behave.)      
+    *      
+    * TODO: this should be a oneway call (especially since it's called     
+    * directly from the key queue thread).      
+    */     
+    void answerRingingCall(); 
+    
+    /**
+     * Allow mobile data connections.
+     */
+    boolean enableDataConnectivity();
+
+    /**
+     * Disallow mobile data connections.
+     */
+    boolean disableDataConnectivity();
+
+    /**
+     * Report whether data connectivity is possible.
+     */
+    boolean isDataConnectivityPossible();
+} 

BIN
src/com/android/internal/telephony/vssver2.scc


+ 226 - 0
src/com/ldci/t56/mobile/db/DbAdapter.java

@@ -0,0 +1,226 @@
+package com.ldci.t56.mobile.db;
+
+
+
+import com.ldci.t56.mobile.info.Call_Forbid_Info;
+import com.ldci.t56.mobile.info.Call_Record_Info;
+import com.ldci.t56.mobile.info.Message_Forbid_Info;
+import com.ldci.t56.mobile.info.Message_Rubbish_Info;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.util.Log;
+
+public class DbAdapter {
+	
+	private static final String TAG = "DbAdapter";
+	private DatabaseHelper mDatabaseHelper;
+	private SQLiteDatabase mSQLiteDatabase;
+	private Context mContext;
+	private static final String DB = "db.db";
+	private static final int DB_VERSION = 1;
+	
+	//	5个表:短信黑名单表,短信垃圾箱表,来电黑名单表,来电拦截记录表
+	public static final String MESSAGE_FORBID_TABLE_NAME = "message_forbid_table";
+	public final static String MESSAGE_RUBBISH_TABLE_NAME = "message_rubbish_table";
+	public final static String CALL_FORBID_TABLE_NAME = "call_forbid_table";
+	public final static String CALL_RECORD_TABLE_NAME = "call_record_table";
+	//	公用id字段
+	public static final String TABLE_ID = "_id";
+	// 短信黑名单表字段:来电号码
+	public final static String MESSAGE_FORBID_PHONE = "message_forbid_phone";
+	//	短信垃圾箱表字段:垃圾短信号码,收件时间,短信内容
+	public static final String MESSAGE_RUBBISH_PHONE = "message_rubbish_phone";
+	public static final String MESSAGE_RUBBISH_TIME = "message_rubbish_time";
+	public final static String MESSAGE_RUBBISH_CONTENT = "message_rubbish_content";
+	//	来电黑名单表字段:黑名单号码		
+	public static final String CALL_FORBID_PHONE = "call_forbid_phone";
+	//	来电拦截记录表字段:黑名单号码:来电时间,来电归属地
+	public static final String CALL_RECORD_PHONE = "call_record_phone";
+	public static final String CALL_RECORD_TIME = "call_record_time";
+	public static final String CALL_RECORD_AREA = "call_record_area";
+	
+	public DbAdapter(Context mCtx){
+		Log.d(TAG, "mCtxmTab");
+		mContext=mCtx;
+	}
+	
+	public void close(){
+		Log.d(TAG, "close");
+		mDatabaseHelper.close();
+	}
+	
+	public DbAdapter open(){
+		Log.d(TAG, "open");
+		mDatabaseHelper=new DatabaseHelper(mContext);
+		mSQLiteDatabase=mDatabaseHelper.getWritableDatabase();
+		return this;
+	}
+	
+	public Cursor getAll(String table){
+		Log.d(TAG, "getAll");
+		return mSQLiteDatabase.rawQuery("select * from "+table, null);
+	}
+	public Cursor getPhone(String phone,int i){
+		Cursor mReturn = null;
+		switch(i){
+		case 1:
+			mReturn= mSQLiteDatabase.rawQuery("select * from "+MESSAGE_RUBBISH_TABLE_NAME+" where "+MESSAGE_RUBBISH_PHONE+"="+"\'"+phone+"\'", null);
+			break;
+		case 2:
+			mReturn= mSQLiteDatabase.rawQuery("select * from "+MESSAGE_FORBID_TABLE_NAME+" where "+MESSAGE_FORBID_PHONE+"="+"\'"+phone+"\'", null);
+			break;
+		case 3:
+			mReturn =mSQLiteDatabase.rawQuery("select * from "+CALL_RECORD_TABLE_NAME+" where "+CALL_RECORD_PHONE+"="+"\'"+phone+"\'", null);
+			break;
+		case 4:
+			mReturn= mSQLiteDatabase.rawQuery("select * from "+CALL_FORBID_TABLE_NAME+" where "+CALL_FORBID_PHONE+"="+"\'"+phone+"\'", null);
+			break;
+		}
+		return mReturn;
+	}
+	
+	public Cursor getTime(String tableName,String columnName,String recordTime){
+		return mSQLiteDatabase.rawQuery("select * from "+tableName+" where "+columnName+" = "+"\'"+recordTime+"\'", null);
+	}
+	
+	public Cursor getId(long id,String tableName){
+		return mSQLiteDatabase.rawQuery("select * from "+tableName+" where "+TABLE_ID+" = "+ id, null);
+	}
+	
+	public Long getAdd(Message_Rubbish_Info mInfo){
+		ContentValues mValues=new ContentValues();
+		mValues.put(MESSAGE_RUBBISH_CONTENT,mInfo.getMessage_rubbish_content() );
+		mValues.put(MESSAGE_RUBBISH_PHONE, mInfo.getMessage_rubbish_phone());
+		mValues.put(MESSAGE_RUBBISH_TIME, mInfo.getMessage_rubbish_time());
+		long rowId=mSQLiteDatabase.insert(MESSAGE_RUBBISH_TABLE_NAME, null,mValues);
+		return rowId;	
+	}
+	
+	public Long getAdd(Message_Forbid_Info mInfo){
+		ContentValues mValues=new ContentValues();
+		mValues.put(MESSAGE_FORBID_PHONE,mInfo.getMessage_forbid_phone() );
+		long rowId=mSQLiteDatabase.insert(MESSAGE_FORBID_TABLE_NAME, null,mValues);
+		return rowId;	
+	}
+	
+	public Long getAdd(Call_Forbid_Info mInfo){
+		ContentValues mValues=new ContentValues();
+		mValues.put(CALL_FORBID_PHONE,mInfo.getCall_forbid_phone() );
+		long rowId=mSQLiteDatabase.insert(CALL_FORBID_TABLE_NAME, null,mValues);
+		return rowId;	
+	}
+	
+	public Long getAdd(Call_Record_Info mInfo){
+		ContentValues mValues=new ContentValues();
+		mValues.put(CALL_RECORD_AREA,mInfo.getCall_record_area() );
+		mValues.put(CALL_RECORD_PHONE, mInfo.getCall_record_phone());
+		mValues.put(CALL_RECORD_TIME, mInfo.getCall_record_time());
+		long rowId=mSQLiteDatabase.insert(CALL_RECORD_TABLE_NAME, null,mValues);
+		return rowId;	
+	}
+	
+	public boolean getDel(long rowId,String table){
+		return mSQLiteDatabase.delete(table, TABLE_ID+"="+rowId, null) > 0;	
+	}
+	
+	public boolean getDel(String table, String column, String phone){
+		return mSQLiteDatabase.delete(table, column+"=?", new String[]{phone}) > 0;	
+	}
+	
+	public void deleteTable(String tableName){
+		mSQLiteDatabase.execSQL("delete from "+tableName);
+	}
+	
+	private static class DatabaseHelper extends SQLiteOpenHelper{
+		
+		StringBuilder mStringBuilder_1;
+		StringBuilder mStringBuilder_2;
+		StringBuilder mStringBuilder_3;
+		StringBuilder mStringBuilder_4;
+		
+		public DatabaseHelper(Context context) {
+			super(context, DB, null, DB_VERSION);
+		}
+		
+		public void initCreateSQL(){
+					mStringBuilder_1=new StringBuilder();
+					mStringBuilder_1.delete(0, mStringBuilder_1.length());
+					Log.d(TAG, "initCreateSQL");
+					mStringBuilder_1.append("create table ");
+					mStringBuilder_1.append(MESSAGE_RUBBISH_TABLE_NAME );
+					mStringBuilder_1.append("(");
+					mStringBuilder_1.append(TABLE_ID );	
+					mStringBuilder_1.append(" integer primary key AUTOINCREMENT,");
+					mStringBuilder_1.append(MESSAGE_RUBBISH_PHONE);
+					mStringBuilder_1.append(" text ,");
+					mStringBuilder_1.append(MESSAGE_RUBBISH_TIME);
+					mStringBuilder_1.append(" text ,");
+					mStringBuilder_1.append(MESSAGE_RUBBISH_CONTENT);
+					mStringBuilder_1.append(" text ");
+					mStringBuilder_1.append(" );");
+					Log.d(TAG, "MESSAGE_RUBBISH_TABLE_NAME");
+					mStringBuilder_2=new StringBuilder();
+					mStringBuilder_2.append("create table ");	
+					mStringBuilder_2.append(MESSAGE_FORBID_TABLE_NAME );
+					mStringBuilder_2.append("( ");
+					mStringBuilder_2.append(TABLE_ID);	
+					mStringBuilder_2.append(" integer primary key AUTOINCREMENT,");
+					mStringBuilder_2.append(MESSAGE_FORBID_PHONE);
+					mStringBuilder_2.append(" text");
+					mStringBuilder_2.append(" );");
+					Log.d(TAG, "MESSAGE_FORBID_TABLE_NAME");
+					mStringBuilder_3=new StringBuilder();
+					mStringBuilder_3.append("create table ");	
+					mStringBuilder_3.append(CALL_RECORD_TABLE_NAME );
+					mStringBuilder_3.append("( ");
+					mStringBuilder_3.append(TABLE_ID );	
+					mStringBuilder_3.append(" integer primary key AUTOINCREMENT,");
+					mStringBuilder_3.append(CALL_RECORD_PHONE);
+					mStringBuilder_3.append(" text,");
+					mStringBuilder_3.append(CALL_RECORD_TIME);
+					mStringBuilder_3.append(" text,");
+					mStringBuilder_3.append(CALL_RECORD_AREA);
+					mStringBuilder_3.append(" text ");
+					mStringBuilder_3.append(" );");
+					Log.d(TAG, "CALL_RECORD_TABLE_NAME");
+					mStringBuilder_4=new StringBuilder();
+					mStringBuilder_4.append("create table ");	
+					mStringBuilder_4.append(CALL_FORBID_TABLE_NAME );
+					mStringBuilder_4.append("( ");
+					mStringBuilder_4.append(TABLE_ID );	
+					mStringBuilder_4.append(" integer primary key AUTOINCREMENT,");
+					mStringBuilder_4.append(CALL_FORBID_PHONE);
+					mStringBuilder_4.append(" text");	
+					mStringBuilder_4.append(" );");	
+					Log.d(TAG, "CALL_FORBID_TABLE_NAME");
+				
+		}
+		
+		@Override
+		public void onCreate(SQLiteDatabase db) {
+			Log.d(TAG, "onCreate");
+			Log.d(TAG, "mStringBuilder");
+			
+			initCreateSQL();
+			db.execSQL(mStringBuilder_1.toString());
+			Log.d(TAG, mStringBuilder_1.toString());
+			db.execSQL(mStringBuilder_2.toString());
+			Log.d(TAG, mStringBuilder_2.toString());
+			db.execSQL(mStringBuilder_3.toString());
+			Log.d(TAG, mStringBuilder_3.toString());
+			db.execSQL(mStringBuilder_4.toString());
+			Log.d(TAG, mStringBuilder_4.toString());
+		}
+
+		@Override
+		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+			db.execSQL("drop table if exists"+MESSAGE_RUBBISH_TABLE_NAME, null);
+			Log.d(TAG, "onUpgrade");
+		}
+		
+	}
+}

+ 26 - 0
src/com/ldci/t56/mobile/handler/PhoneNumberXml.java

@@ -0,0 +1,26 @@
+package com.ldci.t56.mobile.handler;
+
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import android.util.Log;
+
+public class PhoneNumberXml extends DefaultHandler {
+	public static String mPhoneNumberStr;
+	
+	@Override
+	public void setDocumentLocator(Locator locator) {
+		super.setDocumentLocator(locator);
+		mPhoneNumberStr = "";
+	}
+
+	@Override
+	public void characters(char[] ch, int start, int length)
+			throws SAXException {
+		super.characters(ch, start, length);
+		Log.d("phonenumber","xml data is "+new String(ch,start,length));
+		mPhoneNumberStr += "\n"+new String(ch,start,length);
+	}
+	
+}

+ 15 - 0
src/com/ldci/t56/mobile/info/Call_Forbid_Info.java

@@ -0,0 +1,15 @@
+package com.ldci.t56.mobile.info;
+
+public class Call_Forbid_Info {
+	private String call_forbid_phone;
+
+	public String getCall_forbid_phone() {
+		return call_forbid_phone;
+	}
+
+	public void setCall_forbid_phone(String callForbidPhone) {
+		call_forbid_phone = callForbidPhone;
+	}
+	
+
+}

+ 25 - 0
src/com/ldci/t56/mobile/info/Call_Record_Info.java

@@ -0,0 +1,25 @@
+package com.ldci.t56.mobile.info;
+
+public class Call_Record_Info {
+	private String call_record_phone;
+	private String call_record_time;
+	private String call_record_area;
+	public String getCall_record_phone() {
+		return call_record_phone;
+	}
+	public void setCall_record_phone(String callRecordPhone) {
+		call_record_phone = callRecordPhone;
+	}
+	public String getCall_record_time() {
+		return call_record_time;
+	}
+	public void setCall_record_time(String callRecordTime) {
+		call_record_time = callRecordTime;
+	}
+	public String getCall_record_area() {
+		return call_record_area;
+	}
+	public void setCall_record_area(String callRecordArea) {
+		call_record_area = callRecordArea;
+	}
+}

+ 15 - 0
src/com/ldci/t56/mobile/info/Message_Forbid_Info.java

@@ -0,0 +1,15 @@
+package com.ldci.t56.mobile.info;
+
+
+
+public class Message_Forbid_Info  {
+	private String message_forbid_phone;
+
+public String getMessage_forbid_phone() {
+	return message_forbid_phone;
+}
+
+public void setMessage_forbid_phone(String messageForbidPhone) {
+	message_forbid_phone = messageForbidPhone;
+}
+}

+ 25 - 0
src/com/ldci/t56/mobile/info/Message_Rubbish_Info.java

@@ -0,0 +1,25 @@
+package com.ldci.t56.mobile.info;
+
+public class Message_Rubbish_Info {
+	private String message_rubbish_phone;
+	private String message_rubbish_content;
+	private String message_rubbish_time;
+	public String getMessage_rubbish_time() {
+		return message_rubbish_time;
+	}
+	public void setMessage_rubbish_time(String messageRubbishTime) {
+		message_rubbish_time = messageRubbishTime;
+	}
+	public String getMessage_rubbish_phone() {
+		return message_rubbish_phone;
+	}
+	public void setMessage_rubbish_phone(String messageRubbishPhone) {
+		message_rubbish_phone = messageRubbishPhone;
+	}
+	public String getMessage_rubbish_content() {
+		return message_rubbish_content;
+	}
+	public void setMessage_rubbish_content(String messageRubbishContent) {
+		message_rubbish_content = messageRubbishContent;
+	}
+}

+ 31 - 0
src/com/ldci/t56/mobile/info/PhoneInfo.java

@@ -0,0 +1,31 @@
+package com.ldci.t56.mobile.info;
+
+public class PhoneInfo {
+	private String phoneNum;
+	private String date;
+	private String state;
+
+	public void setPhoneNum(String phoneNum) {
+		this.phoneNum = phoneNum;
+	}
+
+	public String getPhoneNum() {
+		return phoneNum;
+	}
+
+	public void setDate(String date) {
+		this.date = date;
+	}
+
+	public String getDate() {
+		return date;
+	}
+
+	public void setState(String state) {
+		this.state = state;
+	}
+
+	public String getState() {
+		return state;
+	}
+}

+ 40 - 0
src/com/ldci/t56/mobile/info/SmsInfo.java

@@ -0,0 +1,40 @@
+package com.ldci.t56.mobile.info;
+
+public class SmsInfo {
+	private String address;
+	private String date;
+	private String body;
+	private String state;
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setBody(String body) {
+		this.body = body;
+	}
+
+	public String getBody() {
+		return body;
+	}
+
+	public void setDate(String date) {
+		this.date = date;
+	}
+
+	public String getDate() {
+		return date;
+	}
+
+	public void setState(String state) {
+		this.state = state;
+	}
+
+	public String getState() {
+		return state;
+	}
+}

+ 517 - 0
src/com/ldci/t56/mobile/safe/CallActivity.java

@@ -0,0 +1,517 @@
+package com.ldci.t56.mobile.safe;
+
+import java.util.ArrayList;
+
+import android.app.AlertDialog;
+import android.app.TabActivity;
+import android.content.BroadcastReceiver;
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.OperationApplicationException;
+import android.content.DialogInterface.OnClickListener;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.provider.ContactsContract;
+import android.provider.Contacts.Phones;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.RelativeLayout;
+import android.widget.TabHost;
+import android.widget.Toast;
+import android.widget.TabHost.OnTabChangeListener;
+
+import com.ldci.t56.mobile.db.DbAdapter;
+import com.ldci.t56.mobile.info.Call_Forbid_Info;
+import com.ldci.t56.mobile.tool.BroadCastTool;
+
+public class CallActivity extends TabActivity implements OnTabChangeListener {
+	
+	private DbAdapter mDbAdapter;
+	private Cursor mCursorTab1;
+	private Cursor mCursorTab2;
+	private ListView mListViewTab1;
+	private ListView mListViewTab2;
+	private static final int MENU_RUBBISH_BACK = Menu.FIRST;
+	private static final int MENU_RUBBISH_REPLY = Menu.FIRST+1;
+	private static final int MENU_RUBBISH_CALL = Menu.FIRST+2;
+	private static final int MENU_RUBBISH_DELETE = Menu.FIRST+3;
+	private static final int MENU_RUBBISH_CLEAR = Menu.FIRST+4;
+	
+	private static final int MENU_FORBID_REPLY = Menu.FIRST+5;
+	private static final int MENU_FORBID_CALL = Menu.FIRST+6;
+	private static final int MENU_FORBID_DELETE = Menu.FIRST+7;
+	private static final int MENU_FORBID_CLEAR = Menu.FIRST+8;
+	private static final int MENU_FORBID_ADD = Menu.FIRST+9;
+	private static final int MENU_FORBID_ADD_FIRST = Menu.FIRST+10;
+	
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.tabhost_public);
+		initFindViewById();
+		TabHost mTabHost=getTabHost();
+		mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("拦截记录",getResources().getDrawable(R.drawable.tab_icon_1)).setContent(R.id.tabhost_public_listview));
+		mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("黑名单",getResources().getDrawable(R.drawable.tab_icon_2)).setContent(R.id.tabhost_public_listview_tab2));
+		mTabHost.setOnTabChangedListener(this);
+		mTabHost.setCurrentTab(0);
+
+		mDbAdapter = new DbAdapter(CallActivity.this);
+		mDbAdapter.open();
+		
+		initTab1Data();
+	}
+	
+	private MyBroadCastReceiver mMBCR;
+	private IntentFilter mIF;
+	@Override
+	protected void onResume(){
+		super.onResume();
+		mIF = new IntentFilter();
+		mIF.addAction(BroadCastTool.CALL_RECEIVED_ACTION);
+		mMBCR = new MyBroadCastReceiver();
+		this.registerReceiver(mMBCR, mIF);
+	}
+	
+	@Override
+	protected void onDestroy(){
+		super.onDestroy();
+		this.unregisterReceiver(mMBCR);
+		mDbAdapter.close();
+	}
+	/** 打電話*/
+	Intent mIntent;
+	private void actionCALL(int position, Cursor c,String column){
+		c.moveToPosition(position);
+		Uri uri = Uri.parse("tel:"+c.getString(c.getColumnIndex(column)));
+		mIntent = new Intent(Intent.ACTION_CALL, uri);   
+		startActivity(mIntent);   
+	}
+	/**發短信 */
+	private void actionSMS(int position, Cursor c,String column){
+		c.moveToPosition(position);
+		mIntent = new Intent(Intent.ACTION_VIEW);
+		mIntent.putExtra("address", c.getString(c.getColumnIndex(column)));
+		mIntent.setType("vnd.android-dir/mms-sms");
+		startActivity(mIntent);   
+	}
+	/** 刪除標記*/
+	private void delMarkItemData(ListView lv,Cursor c,String table){
+		int mContant = lv.getCount();
+		for(int i=0;i!=mContant;i++){
+			if(lv.getCheckedItemPositions().get(i)){
+				c.moveToPosition(i);
+				long rowId = c.getLong(c.getColumnIndex(DbAdapter.TABLE_ID));
+				mDbAdapter.getDel(rowId, table);
+			}
+		}
+	}
+	
+	private String getPhoneNumber(int position,Cursor c){		
+		c.moveToPosition(position);
+		return c.getString(c.getColumnIndex(DbAdapter.CALL_RECORD_PHONE)); 
+	}
+	
+	EditText mCallName;
+	EditText mCallNumber;
+	private void addContact(String phone){
+		LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+		LinearLayout mLL = (LinearLayout)mLI.inflate(R.layout.set_call_record_name, null);
+		mCallName = (EditText)mLL.findViewById(R.id.EditText01);
+		mCallNumber = (EditText)mLL.findViewById(R.id.EditText02);
+		mCallNumber.setText(phone);
+		new AlertDialog.Builder(this).setTitle("加入联系人").
+		setView(mLL).
+		setPositiveButton("确定", new OnClickListener() {
+			@Override
+			public void onClick(DialogInterface dialog, int which) {
+				if(mCallName.getText().toString().length() != 0&&mCallNumber.getText().toString().length() != 0){
+					
+					ContentValues cv = new ContentValues();
+					ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
+					ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
+					builder.withValues(cv);
+					operationList.add(builder.build());
+					builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
+					builder.withValueBackReference(StructuredName.RAW_CONTACT_ID, 0);
+	                builder.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+	                builder.withValue(StructuredName.DISPLAY_NAME, mCallName.getText().toString());
+	                operationList.add(builder.build());
+	                builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
+	                builder.withValueBackReference(Phone.RAW_CONTACT_ID, 0);
+	                builder.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+	                builder.withValue(Phone.NUMBER, mCallNumber.getText().toString());
+	                builder.withValue(Data.IS_PRIMARY, 1);
+	                operationList.add(builder.build());
+	                try {
+	                	getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList);
+					} catch (RemoteException e) {
+						e.printStackTrace();
+					} catch (OperationApplicationException e) {
+						e.printStackTrace();
+					}
+					Toast.makeText(getApplicationContext(), "成功添加!", Toast.LENGTH_SHORT).show();
+				}else{
+					Toast.makeText(getApplicationContext(), "姓名或号码不能为空!", Toast.LENGTH_SHORT).show();
+					addContact(mCallNumber.getText().toString());
+				}
+			}
+		}).setNegativeButton("取消", null).create().show();
+	}
+	
+	/** 多选时打电话只拨打第一个被选中的号码,发短信给第一个被选中的号码发送*/
+	private void callMethod(ListView lv,String sms_call,Cursor c,String column,String addContact){
+		if(lv.getCheckedItemPositions().size() >= 1){
+			for(int i=0;i!=lv.getCount();i++){
+				if(lv.getCheckedItemPositions().get(i)){
+					c.moveToPosition(i);
+					String phone = c.getString(c.getColumnIndex(column));
+					if(sms_call.equals("sms")){
+						if("addContact".equals(addContact)){
+							addContact(phone);
+						}else{
+							mIntent = new Intent(Intent.ACTION_VIEW);
+							mIntent.putExtra("address", phone);
+							mIntent.setType("vnd.android-dir/mms-sms");
+							startActivity(mIntent);  
+						} 
+					}else if(sms_call.equals("call")){
+						if("addContact".equals(addContact)){
+							addContact(phone);
+						}else{
+							Uri uri = Uri.parse("tel:"+phone);
+							mIntent = new Intent(Intent.ACTION_DIAL, uri);   
+							startActivity(mIntent);
+						}
+					}
+					break;
+				}
+			}
+		}
+	}
+	
+	/**-------------------------------初始化基本组件--------------------------------------------------------------------------------------------------*/
+	private void initFindViewById(){
+		mListViewTab1 = (ListView)findViewById(R.id.tabhost_public_listview);
+		mListViewTab2 = (ListView)findViewById(R.id.tabhost_public_listview_tab2);
+	}
+	
+	/**-------------------------------点击不同标签时的事件监听 ----------------------------------------------------------------------------------*/
+	private boolean isCheckedTab1OrTab2 = false;
+	public void onTabChanged(String tabId) {
+		if("tab1".equals(tabId)){
+			isCheckedTab1OrTab2 = false;
+			initTab1Data();
+		}else if("tab2".equals(tabId)){
+			isCheckedTab1OrTab2 = true;
+			initTab2Data();
+		}
+	}
+	
+	private int i = 0;
+	/**---------------------------------------------从数据库中获得并加载垃圾短信数据Start-------------------------------------------------*/
+	
+	private void initTab1Data(){
+		mCursorTab1=mDbAdapter.getAll(DbAdapter.CALL_RECORD_TABLE_NAME)	;
+		this.stopManagingCursor(mCursorTab1);
+		i = 0;
+		int mCount = mCursorTab1.getCount();
+		if(mCount >= 0){
+			mArray = new String[mCount];
+			if(mCursorTab1.moveToFirst()){
+				do{
+					mArray[i] = "垃圾号码:"+mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.CALL_RECORD_PHONE))+"\n"+
+										 "来电时间:"+mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.CALL_RECORD_TIME));
+					i++;
+				}while(mCursorTab1.moveToNext());
+			}
+			ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(CallActivity.this,android.R.layout.simple_list_item_checked,mArray);
+			mListViewTab1.setAdapter(mAdapter);
+			mListViewTab1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+		}
+		
+	}
+	
+	String[] mArray;
+	private void initTab2Data(){
+		mCursorTab2 = mDbAdapter.getAll(DbAdapter.CALL_FORBID_TABLE_NAME);
+		this.startManagingCursor(mCursorTab2);		
+		i = 0;
+		int mCount = mCursorTab2.getCount();
+		if(mCount >= 0){
+			mArray = new String[mCount];
+			if(mCursorTab2.moveToFirst()){
+				do{
+					mArray[i] = mCursorTab2.getString(mCursorTab2.getColumnIndex(DbAdapter.CALL_FORBID_PHONE));
+					i++;
+				}while(mCursorTab2.moveToNext());
+			}
+			ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(CallActivity.this,android.R.layout.simple_list_item_checked,mArray);
+			mListViewTab2.setAdapter(mAdapter);
+			mListViewTab2.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+		}
+		
+	}
+	/*---------------------------------------------从数据库中获得并加载垃圾短信数据End----------------------------------------------------*/
+	
+	/*--------------------------------------------------------------------------------------关于动态菜单Begin---------------------------------------*/
+	boolean isCreatePreparedOptionMenu1 = true;
+	boolean isCreatePreparedOptionMenu2 = false;
+	boolean isCreatePreparedOptionMenu3 = false;
+	@Override
+	public boolean onPrepareOptionsMenu(Menu menu) {
+		if(isCheckedTab1OrTab2 == false){
+			isCreatePreparedOptionMenu3 = false;
+			if(mListViewTab1.getCount()>0){
+				if(isCreatePreparedOptionMenu1){
+					menu.add(0, MENU_RUBBISH_REPLY, 0, "回复").setIcon(android.R.drawable.ic_menu_send);
+					menu.add(0, MENU_RUBBISH_CALL, 0, "拨打").setIcon(android.R.drawable.ic_menu_call);
+					menu.add(0, MENU_RUBBISH_DELETE, 0, "删除").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
+					menu.add(0, MENU_RUBBISH_CLEAR, 0, "清空").setIcon(android.R.drawable.ic_menu_delete);
+					menu.add(0, MENU_RUBBISH_BACK, 0, "加入联系人").setIcon(android.R.drawable.ic_menu_add);
+					isCreatePreparedOptionMenu1 = false;
+				}
+			}else{
+				menu.removeItem(MENU_RUBBISH_BACK);
+				menu.removeItem(MENU_RUBBISH_REPLY);
+				menu.removeItem(MENU_RUBBISH_CALL);
+				menu.removeItem(MENU_RUBBISH_DELETE);
+				menu.removeItem(MENU_RUBBISH_CLEAR);
+				isCreatePreparedOptionMenu1 = true;
+			}
+		}else{
+			menu.removeItem(MENU_RUBBISH_BACK);
+			menu.removeItem(MENU_RUBBISH_REPLY);
+			menu.removeItem(MENU_RUBBISH_CALL);
+			menu.removeItem(MENU_RUBBISH_DELETE);
+			menu.removeItem(MENU_RUBBISH_CLEAR);
+			isCreatePreparedOptionMenu1 = true;
+		}
+		
+		if(isCheckedTab1OrTab2 == true){
+			if(mListViewTab2.getCount()>0){
+				if(!isCreatePreparedOptionMenu2){
+					menu.add(0, MENU_FORBID_ADD, 0, "添加").setIcon(android.R.drawable.ic_menu_add);
+					menu.add(0, MENU_FORBID_REPLY, 0, "回复").setIcon(android.R.drawable.ic_menu_send);
+					menu.add(0, MENU_FORBID_CALL, 0, "拨打").setIcon(android.R.drawable.ic_menu_call);
+					menu.add(0, MENU_FORBID_DELETE, 0, "删除").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
+					menu.add(0, MENU_FORBID_CLEAR, 0, "清空").setIcon(android.R.drawable.ic_menu_delete);
+					isCreatePreparedOptionMenu2 = true;
+				}
+				menu.removeItem(MENU_FORBID_ADD_FIRST);
+				isCreatePreparedOptionMenu3 = false;
+			}else{
+				if(!isCreatePreparedOptionMenu3){
+					menu.add(0, MENU_FORBID_ADD_FIRST, 0, "添加").setIcon(android.R.drawable.ic_menu_add);
+					isCreatePreparedOptionMenu3 = true;
+				}
+				menu.removeItem(MENU_FORBID_REPLY);
+				menu.removeItem(MENU_FORBID_CALL);
+				menu.removeItem(MENU_FORBID_DELETE);
+				menu.removeItem(MENU_FORBID_CLEAR);
+				menu.removeItem(MENU_FORBID_ADD);
+				isCreatePreparedOptionMenu2 = false;
+			}
+		}else{
+			menu.removeItem(MENU_FORBID_REPLY);
+			menu.removeItem(MENU_FORBID_CALL);
+			menu.removeItem(MENU_FORBID_DELETE);
+			menu.removeItem(MENU_FORBID_CLEAR);
+			menu.removeItem(MENU_FORBID_ADD);
+			menu.removeItem(MENU_FORBID_ADD_FIRST);
+			isCreatePreparedOptionMenu2 = false;
+		}
+		return super.onPrepareOptionsMenu(menu);
+	}
+
+	@Override
+	public boolean onOptionsItemSelected(MenuItem item) {
+		int positionTab1 = mListViewTab1.getSelectedItemPosition();
+		int positionTab2 = mListViewTab2.getSelectedItemPosition();
+		switch(item.getItemId()){
+		case MENU_RUBBISH_REPLY:
+			if(positionTab1 != -1){
+				actionSMS(positionTab1,mCursorTab1,DbAdapter.CALL_RECORD_PHONE);
+			}else{
+				callMethod(mListViewTab1,"sms",mCursorTab1,DbAdapter.CALL_RECORD_PHONE,"");
+			}
+			break;
+		case MENU_RUBBISH_CALL:
+			if(positionTab1 != -1){
+				actionCALL(positionTab1,mCursorTab1,DbAdapter.CALL_RECORD_PHONE);
+			}else{
+				callMethod(mListViewTab1,"call",mCursorTab1,DbAdapter.CALL_RECORD_PHONE,"");
+			}
+			break;
+		case MENU_RUBBISH_DELETE:
+			if(positionTab1 != -1){
+				mCursorTab1.moveToPosition(positionTab1);
+				long rowId = mCursorTab1.getLong(mCursorTab1.getColumnIndex(DbAdapter.TABLE_ID));
+				mDbAdapter.getDel(rowId, DbAdapter.CALL_RECORD_TABLE_NAME);
+			}else{
+				delMarkItemData(mListViewTab1,mCursorTab1,DbAdapter.CALL_RECORD_TABLE_NAME);
+			}
+			initTab1Data();
+			break;
+		case MENU_RUBBISH_CLEAR:
+			mDbAdapter.deleteTable(DbAdapter.CALL_RECORD_TABLE_NAME);
+			initTab1Data();
+			break;
+		case MENU_RUBBISH_BACK:
+			if(positionTab1 != -1){
+				addContact(getPhoneNumber(positionTab1, mCursorTab1));
+			}else{
+				callMethod(mListViewTab1,"sms",mCursorTab1,DbAdapter.CALL_RECORD_PHONE,"addContact");
+			}
+			break;
+		case MENU_FORBID_ADD:
+		case MENU_FORBID_ADD_FIRST:
+			addForbidPhone();
+			break;
+		case MENU_FORBID_REPLY:
+			if(positionTab2 != -1){
+				actionSMS(positionTab2,mCursorTab2,DbAdapter.CALL_FORBID_PHONE);
+			}else{
+				callMethod(mListViewTab2,"sms",mCursorTab2,DbAdapter.CALL_FORBID_PHONE,"");
+			}
+			break;
+		case MENU_FORBID_CALL:
+			if(positionTab2 != -1){
+				actionCALL(positionTab2,mCursorTab2,DbAdapter.CALL_FORBID_PHONE);
+			}else{
+				callMethod(mListViewTab2,"call",mCursorTab2,DbAdapter.CALL_FORBID_PHONE,"");
+			}
+			break;
+		case MENU_FORBID_DELETE:
+			if(positionTab2 != -1){
+				mCursorTab2.moveToPosition(positionTab2);
+				long rowId = mCursorTab2.getLong(mCursorTab2.getColumnIndex(DbAdapter.TABLE_ID));
+				mDbAdapter.getDel(rowId, DbAdapter.CALL_FORBID_TABLE_NAME);
+			}else{
+				delMarkItemData(mListViewTab2,mCursorTab2,DbAdapter.CALL_FORBID_TABLE_NAME);
+			}
+			initTab2Data();
+			break;
+		case MENU_FORBID_CLEAR:
+			mDbAdapter.deleteTable(DbAdapter.CALL_FORBID_TABLE_NAME);
+			initTab2Data();
+			break;
+				
+		}
+		return super.onOptionsItemSelected(item);
+	}
+	/*--------------------------------------------------------------------------------------关于动态菜单End----------------------------------------------*/
+	
+	/*--------------------------------------------------------------------------------------接收到垃圾短信时的广播接收器Begin------------------*/
+	class MyBroadCastReceiver extends BroadcastReceiver{
+		@Override
+		public void onReceive(Context context, Intent intent) {
+			if(intent.getAction().equals(BroadCastTool.CALL_RECEIVED_ACTION)){
+				initTab1Data();
+			}
+		}
+	}
+	/*--------------------------------------------------------------------------------------接收到垃圾短信时的广播接收器End---------------------*/
+	
+	/**---------------------------------------------------------------------------------------添加黑名单的Dialog-------------------------------------------*/
+	EditText mForbidPhone ;
+	private void addForbidPhone(){
+		LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+		RelativeLayout mRL = (RelativeLayout)mLI.inflate(R.layout.message_forbid_add, null);
+		mForbidPhone = (EditText)mRL.findViewById(R.id.new_forbid_phone);
+		Button mButton=(Button)mRL.findViewById(R.id.get_system_contact);
+		mButton.setOnClickListener(new View.OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				showMulitAlertDialog();
+			}
+		});
+		new AlertDialog.Builder(CallActivity.this).setTitle("添加黑名单").setView(mRL)
+		.setPositiveButton("确定", new OnClickListener(){
+			public void onClick(DialogInterface arg0, int arg1) {
+				String mNewForbidPhone = mForbidPhone.getText().toString();
+				if(mNewForbidPhone.length() < 3){
+					Toast.makeText(CallActivity.this, "输入错误!", Toast.LENGTH_SHORT).show();
+				}else{
+					String mStr[] = mNewForbidPhone.split(";");
+					for(int i = 0;i != mStr.length;i++){
+						String phone = mStr[i].split(":").length == 1?mStr[i].split(":")[0]:mStr[i].split(":")[1];
+						if(!(mDbAdapter.getPhone(phone, 4)).moveToFirst()){
+							Call_Forbid_Info mCFI = new Call_Forbid_Info();
+							mCFI.setCall_forbid_phone(phone);
+							mDbAdapter.getAdd(mCFI);
+						}else{
+							Toast.makeText(CallActivity.this, "号码"+phone+"已存在!", Toast.LENGTH_SHORT).show();
+						}
+					}
+					initTab2Data();
+					Toast.makeText(CallActivity.this, "添加成功!", Toast.LENGTH_SHORT).show();
+				}
+			}
+		}).setNegativeButton("取消", null).show();
+	}
+	
+	private ListView mLV;
+	@SuppressWarnings("deprecation")
+	private void showMulitAlertDialog(){
+		Cursor mCursor=getContentResolver().query(Phones.CONTENT_URI, new String[]{"_id","name","number"}, null, null, "number desc");
+		startManagingCursor(mCursor);
+		
+		if(mCursor.moveToFirst()){
+			int m = 0;
+			String mContant[] = new String[mCursor.getCount()];
+			do{
+				String phoneNumber = mCursor.getString(mCursor.getColumnIndex(Phones.NUMBER));
+				mContant[m] = mCursor.getString(mCursor.getColumnIndex(Phones.NAME))+":"+(phoneNumber.length() == 13?phoneNumber.substring(2):phoneNumber);
+				m++;
+			}while(mCursor.moveToNext());
+			initListData(mContant);
+		}
+		
+	}
+	
+	String checkInfo;
+	private void initListData(final String[] contant){
+		AlertDialog mAlertDialog=new AlertDialog.Builder(this).setMultiChoiceItems(contant,
+				new boolean[contant.length], 
+				new DialogInterface.OnMultiChoiceClickListener() {
+					
+					@Override
+					public void onClick(DialogInterface dialog, int which, boolean isChecked) {
+						
+					}
+				}).setPositiveButton("确定", new DialogInterface.OnClickListener() {	
+					
+					@Override
+					public void onClick(DialogInterface dialog, int which) {
+						checkInfo = "";
+						for(int i=0;i!=contant.length;i++){
+							if(mLV.getCheckedItemPositions().get(i)){
+								checkInfo += mLV.getAdapter().getItem(i).toString()+";";
+							}
+						}
+						mForbidPhone.setText(checkInfo.substring(0, checkInfo.length()));
+					}
+				}).setNegativeButton("取消", null).create();
+		mLV=mAlertDialog.getListView();
+		mAlertDialog.show();
+	}
+
+}

+ 455 - 0
src/com/ldci/t56/mobile/safe/MainActivity.java

@@ -0,0 +1,455 @@
+package com.ldci.t56.mobile.safe;
+
+import java.io.IOException;
+import java.io.StringReader;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.util.EntityUtils;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.DialogInterface.OnCancelListener;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.SlidingDrawer;
+import android.widget.TextView;
+import android.widget.Toast;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.SlidingDrawer.OnDrawerCloseListener;
+import android.widget.SlidingDrawer.OnDrawerOpenListener;
+
+import com.ldci.t56.mobile.handler.PhoneNumberXml;
+import com.ldci.t56.mobile.tool.BroadCastTool;
+
+public class MainActivity extends Activity implements OnClickListener {
+	/** 成员变量 */
+	public static boolean[] isCheckBoxChecked = new boolean[9];
+	public static boolean[] isRadioButtonChecked = new boolean[4];
+	public static String mUndisturbedContent = "关闭";
+	public static String mStartTime = "23:00";
+	public static String mEndTime = "07:00";
+	private ImageButton mMenu_Message, mMenu_Call, mMenu_Phone, mMenu_State,
+			mMenu_Smart, mMenu_Set;
+	private SlidingDrawer mSlidingDrawer;
+	private ImageView mImageView;
+	private Intent mIntent;
+	private Intent mServiceIntent;
+	public static final String MESSAGE_RUBBISH_TABLE_NAME = "message_rubbish_table";
+	EditText mInputPhoneNumber;
+	String result;
+	private SharedPreferences mSharedPreferences;
+	private SharedPreferences.Editor mEditor;
+
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		Log.d("MainActivity", "onCreate");
+		mServiceIntent = new Intent(BroadCastTool.AUTO_START_SERVICE);
+		confirmPw();
+	}
+
+	@Override
+	protected void onStart() {
+		super.onStart();
+		Log.d("MainActivity", "onStart");
+	}
+
+	@Override
+	protected void onResume() {
+		Log.d("MainActivity", "onResume");
+		super.onResume();
+	}
+
+	//监视键盘的返回键
+	@Override
+	public boolean onKeyDown(int keyCode, KeyEvent event){
+		if(keyCode == KeyEvent.KEYCODE_BACK){
+			new AlertDialog.Builder(MainActivity.this).setTitle("提示").setMessage(
+			"你确定要退出吗?").setPositiveButton("确定",
+			new DialogInterface.OnClickListener() {
+
+				public void onClick(DialogInterface arg0, int arg1) {
+					Intent mIntent = new Intent(BroadCastTool.AUTO_START_SERVICE);
+					stopService(mIntent);
+					MainActivity.this.finish();
+				}
+
+			}).setNegativeButton("取消", null).show();
+			return false;
+		}else{
+			return super.onKeyDown(keyCode, event);
+		}
+	}
+	
+	@Override
+	protected void onStop() {
+		Log.d("MainActivity", "onStop");
+		super.onStop();
+	}
+
+	@Override
+	protected void onDestroy() {
+		super.onDestroy();
+		Log.d("MainActivity", "onDestroy");
+		startService(mServiceIntent);
+	}
+
+	/**设置了密码保护*/
+	private void confirmPw(){
+		mSharedPreferences = this.getSharedPreferences("SharedPreferences", Context.MODE_PRIVATE);
+		boolean isPasswordProtected = mSharedPreferences.getBoolean("isPasswordProtected", false);
+		if(isPasswordProtected){
+			LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+			final RelativeLayout mRL = (RelativeLayout)mLI.inflate(R.layout.protected_password_confirm, null);
+			final EditText mEnterPw = (EditText)mRL.findViewById(R.id.protected_enter_pw);
+			final TextView mForgetPw = (TextView)mRL.findViewById(R.id.protected_forget_pw);
+			new AlertDialog.Builder(MainActivity.this).setTitle("密码保护").setView(mRL)
+			.setPositiveButton("确定", new DialogInterface.OnClickListener(){
+				public void onClick(DialogInterface arg0, int arg1) {
+					mSharedPreferences = getSharedPreferences("SharedPreferences", Context.MODE_PRIVATE);
+					String mPw = mSharedPreferences.getString("mPW", "");
+					if(!mPw.equals(mEnterPw.getText().toString())){
+						Toast.makeText(MainActivity.this, "密码错误!", Toast.LENGTH_LONG).show();
+						confirmPw();
+					}else{
+						initContentView();
+					}
+				}
+			}).setNegativeButton("取消", new DialogInterface.OnClickListener(){
+				public void onClick(DialogInterface arg0, int arg1) {
+					MainActivity.this.finish();
+				}
+			}).setOnCancelListener(new OnCancelListener(){
+
+				public void onCancel(DialogInterface arg0) {
+					MainActivity.this.finish();
+				}
+				
+			}).show();	
+			mForgetPw.setOnClickListener(new OnClickListener(){//对“忘记密码”的监听
+
+				public void onClick(View arg0) {
+					getBackPwByQuestion();
+				}
+				
+			});
+		}else{
+			initContentView();
+		}
+	}
+	
+	/**当密码正确,或者未设置密码保护时的初始化界面*/
+	private void initContentView(){
+		startService(mServiceIntent);
+		setContentView(R.layout.main);
+		initView();
+		initListener();
+		initSlidingListener();
+		stopService(mServiceIntent);
+	}
+	
+	/**用密保问题取回密码*/
+	private void getBackPwByQuestion(){
+		LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+		LinearLayout mLL = (LinearLayout)mLI.inflate(R.layout.getback_pw_by_question, null);
+		final EditText mQuestion = (EditText)mLL.findViewById(R.id.getback_pw_question);
+		final EditText mAnswer = (EditText)mLL.findViewById(R.id.getback_pw_answer);
+		new AlertDialog.Builder(MainActivity.this).setTitle("取回密码").setView(mLL)
+		.setPositiveButton("确定", new DialogInterface.OnClickListener(){
+			public void onClick(DialogInterface arg0, int arg1) {
+				mSharedPreferences = getSharedPreferences("SharedPreferences", Context.MODE_PRIVATE);
+				String mQuestionStr = mSharedPreferences.getString("mPW_Question", "");
+				String mAnswerStr = mSharedPreferences.getString("mPW_Answer", "");
+				if(mQuestionStr.equals(mQuestion.getText().toString())&&mAnswerStr.equals(mAnswer.getText().toString())){
+					new AlertDialog.Builder(MainActivity.this).setMessage("恭喜你,您的密码是 "+mSharedPreferences.getString("mPW", "")+" 记住哦!").show();
+				}else{
+					new AlertDialog.Builder(MainActivity.this).setMessage("哎,杯具了!").show();
+				}
+			}
+		}).setNegativeButton("取消", new DialogInterface.OnClickListener(){
+			public void onClick(DialogInterface arg0, int arg1) {
+				
+			}
+		}).show();	
+	}
+	
+	/** 初始化基本组件 */
+	private void initView() {
+		mMenu_Message = (ImageButton) findViewById(R.id.ImageView01);
+		mMenu_Call = (ImageButton) findViewById(R.id.ImageView02);
+		mMenu_Phone = (ImageButton) findViewById(R.id.ImageView03);
+		mMenu_State = (ImageButton) findViewById(R.id.ImageView04);
+		mMenu_Smart = (ImageButton) findViewById(R.id.ImageView05);
+		mMenu_Set = (ImageButton) findViewById(R.id.ImageView06);
+		mSlidingDrawer = (SlidingDrawer) findViewById(R.id.menu_sliding);
+		mImageView = (ImageView) findViewById(R.id.sliding_image);
+		// mTextView = (TextView) findViewById(R.id.menu_title);
+	}
+
+	/** 注册监听器 */
+	private void initListener() {
+		mMenu_Message.setOnClickListener(this);
+		mMenu_Call.setOnClickListener(this);
+		mMenu_Phone.setOnClickListener(this);
+		mMenu_State.setOnClickListener(this);
+		mMenu_Smart.setOnClickListener(this);
+		mMenu_Set.setOnClickListener(this);
+	}
+
+	/** SlidingDrawer的开关事件监听 */
+	private void initSlidingListener() {
+		mSlidingDrawer.setOnDrawerOpenListener(new OnDrawerOpenListener() {
+			public void onDrawerOpened() {
+				mImageView.setImageResource(R.drawable.spliding_close);
+			}
+		});
+		mSlidingDrawer.setOnDrawerCloseListener(new OnDrawerCloseListener() {
+			public void onDrawerClosed() {
+				mImageView.setImageResource(R.drawable.spliding_open);
+			}
+		});
+	}
+
+	/** 点击事件 */
+	public void onClick(View view) {
+		switch (view.getId()) {
+		case R.id.ImageView01:
+			mIntent = new Intent(MainActivity.this, MessageActivity.class);
+			MainActivity.this.startActivity(mIntent);
+			break;
+		case R.id.ImageView02:
+			mIntent = new Intent(MainActivity.this, CallActivity.class);
+			MainActivity.this.startActivity(mIntent);
+			break;
+		case R.id.ImageView03:
+			phoneAera();
+			break;
+		case R.id.ImageView04:
+			initChangeAudioDialog();
+			break;
+		case R.id.ImageView05:
+			smartSet();
+			break;
+		case R.id.ImageView06:
+			mIntent = new Intent(MainActivity.this, SetActivity.class);
+			MainActivity.this.startActivity(mIntent);
+			break;
+		}
+
+	}
+
+	/**号码归属地查询*/
+	private void phoneAera(){
+		LinearLayout mInputNumber = (LinearLayout) getLayoutInflater().inflate(R.layout.searchphone, null);
+		mInputPhoneNumber = (EditText)mInputNumber.findViewById(R.id.phonenumber);
+		new AlertDialog.Builder(MainActivity.this).setTitle("号码查询")
+		.setIcon(getResources().getDrawable(R.drawable.menu_phone_press)).setView(mInputNumber)
+			.setPositiveButton("确定",new DialogInterface.OnClickListener() {
+					public void onClick(DialogInterface arg0, int arg1) {
+							HttpResponse mHttpResponse = null;
+							try {
+								HttpGet mHttpGet = new HttpGet("http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode="+mInputPhoneNumber.getText().toString()+"&userID=");
+								mHttpResponse = new DefaultHttpClient().execute(mHttpGet);
+								new AlertDialog.Builder(MainActivity.this).setMessage("StatusCode is "+mHttpResponse.getStatusLine().getStatusCode()).show();
+								if(mHttpResponse.getStatusLine().getStatusCode()==200){
+									result = EntityUtils.toString(mHttpResponse.getEntity());
+									Log.d("phonenumber","result is "+result);
+									SAXParserFactory mSAXParserFactory = SAXParserFactory.newInstance();
+									SAXParser mSAXParser = mSAXParserFactory.newSAXParser();
+									XMLReader mXMLReader = mSAXParser.getXMLReader();
+									PhoneNumberXml mPhoneNumberXml = new PhoneNumberXml();
+									mXMLReader.setContentHandler(mPhoneNumberXml);
+									StringReader mStringReader = new StringReader(result);
+									InputSource mInputSource = new InputSource(mStringReader);
+									mXMLReader.parse(mInputSource);
+									new AlertDialog.Builder(MainActivity.this).setMessage(PhoneNumberXml.mPhoneNumberStr).create().show();
+								}else{
+									Toast.makeText(MainActivity.this, "网络连接错误!", Toast.LENGTH_LONG).show();
+								}
+								
+							} catch (ClientProtocolException e) {
+								e.printStackTrace();
+							} catch (IOException e) {
+								e.printStackTrace();
+							} catch (ParserConfigurationException e) {
+								e.printStackTrace();
+							} catch (SAXException e) {
+								e.printStackTrace();
+							}
+					}
+
+				}).setNegativeButton("取消",null).show();
+	}
+	
+	/** 智能收发设置 */
+	private void smartSet() {
+		RelativeLayout intellectLayout = (RelativeLayout) getLayoutInflater()
+				.inflate(R.layout.intellect, null);
+		final SharedPreferences settings = getSharedPreferences("DEMO",
+				MODE_PRIVATE);
+		// 获得设置界面的组件
+		mCheckbox01 = (CheckBox) intellectLayout
+				.findViewById(R.id.intellect_checbox_1);
+		mCheckbox02 = (CheckBox) intellectLayout
+				.findViewById(R.id.intellect_checbox_2);
+		mCheckbox03 = (CheckBox) intellectLayout
+				.findViewById(R.id.intellect_checbox_3);
+		mEditText01 = (EditText) intellectLayout
+				.findViewById(R.id.intellect_edittext01);
+		mEditText02 = (EditText) intellectLayout
+				.findViewById(R.id.intellect_edittext02);
+		// 加载界面的原始设置
+		if (settings.getBoolean("bool01", false)) {
+			mCheckbox01.setChecked(true);
+			mEditText01.setVisibility(View.VISIBLE);
+			mEditText01.setText(settings.getString("smartE01", ""));
+		}
+		if (settings.getBoolean("bool02", false)) {
+			mCheckbox02.setChecked(true);
+			mEditText02.setVisibility(View.VISIBLE);
+			mEditText02.setText(settings.getString("smartE02", ""));
+		}
+		if (settings.getBoolean("bool03", false)) {
+			mCheckbox03.setChecked(true);
+		}
+		// 给checkbox加监听
+		mCheckbox01.setOnCheckedChangeListener(new Checklistenner());
+		mCheckbox02.setOnCheckedChangeListener(new Checklistenner());
+		mCheckbox03.setOnCheckedChangeListener(new Checklistenner());
+
+		new AlertDialog.Builder(this)
+				.setTitle("智能收发设置")
+				.setIcon(getResources().getDrawable(R.drawable.menu_smart_press))
+				.setView(intellectLayout)
+				.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+					public void onClick(DialogInterface dialog, int which) {
+						SharedPreferences.Editor sedit = settings.edit();
+						// String use = settings.getString("username", "");
+						// String passw = settings.getString("password", "");
+						if (mCheckbox01.isChecked()) {
+							boolean bool01 = true;
+							sedit.putBoolean("bool01", bool01).commit();
+							sedit.putString("smartE01",
+									mEditText01.getText().toString()).commit();
+						} else {
+							sedit.remove("bool01").commit();
+							sedit.remove("smartE01").commit();
+						}
+						if (mCheckbox02.isChecked()) {
+							boolean bool02 = true;
+							sedit.putBoolean("bool02", bool02).commit();
+							sedit.putString("smartE02",
+									mEditText02.getText().toString()).commit();
+						} else {
+							sedit.remove("bool02").commit();
+							sedit.remove("smartE02").commit();
+						}
+						if (mCheckbox03.isChecked()) {
+							boolean bool03 = true;
+							sedit.putBoolean("bool03", bool03).commit();
+						} else {
+							sedit.remove("bool03").commit();
+						}
+					}
+				}).setNegativeButton("取消", null).show();
+	}
+
+	private CheckBox mCheckbox01;
+	private CheckBox mCheckbox02;
+	private CheckBox mCheckbox03;
+	private EditText mEditText01;
+	private EditText mEditText02;
+
+	/**
+	 * 智能收发checkbox的监听类
+	 * 
+	 * @author yuli
+	 */
+	class Checklistenner implements OnCheckedChangeListener {
+		public void onCheckedChanged(CompoundButton buttonView,
+				boolean isChecked) {
+			if (!mCheckbox01.isChecked()) {
+				mEditText01.setVisibility(View.GONE);
+			} else {
+				mEditText01.setVisibility(View.VISIBLE);
+			}
+			if (!mCheckbox02.isChecked()) {
+				mEditText02.setVisibility(View.GONE);
+			} else {
+				mEditText02.setVisibility(View.VISIBLE);
+			}
+			if (!mCheckbox03.isChecked()) {
+				Toast.makeText(MainActivity.this, "关闭了电话留言", Toast.LENGTH_SHORT).show();
+			} else {
+				Toast.makeText(MainActivity.this, "开启了电话留言", Toast.LENGTH_SHORT).show();
+			}
+		}
+	}
+	
+	/**更改情景模式的弹出框*/
+	private void initChangeAudioDialog(){
+		LinearLayout mLL = (LinearLayout) getLayoutInflater().inflate(R.layout.main_audio_change, null);
+		final EditText mQJ_MS = (EditText)mLL.findViewById(R.id.edit_qingjing_ms);
+		final EditText mQJ_JY = (EditText)mLL.findViewById(R.id.edit_qingjing_jy);
+		final EditText mQJ_ZD = (EditText)mLL.findViewById(R.id.edit_qingjing_zd);
+		final EditText mQJ_XL = (EditText)mLL.findViewById(R.id.edit_qingjing_xl);
+		mSharedPreferences = getSharedPreferences("QJMO",MODE_PRIVATE);
+		mQJ_MS.setText(mSharedPreferences.getString("mQJ_MS", ""));
+		mQJ_JY.setText(mSharedPreferences.getString("mQJ_JY", ""));
+		mQJ_ZD.setText(mSharedPreferences.getString("mQJ_ZD", ""));
+		mQJ_XL.setText(mSharedPreferences.getString("mQJ_XL", ""));
+		new AlertDialog.Builder(this)
+		.setTitle("情景模式设置")
+		.setIcon(getResources().getDrawable(R.drawable.menu_state_press))
+		.setMessage("发送格式:情景指令+相应指令,如情景指令为qjzl,静音指令为jy,则发送格式为qjzl+jy")
+		.setView(mLL)
+		.setPositiveButton("确定", new DialogInterface.OnClickListener(){
+
+			@Override
+			public void onClick(DialogInterface dialog, int which) {
+				String mMS = mQJ_MS.getText().toString();
+				String mJY = mQJ_JY.getText().toString();
+				String mZD = mQJ_ZD.getText().toString();
+				String mXL = mQJ_XL.getText().toString();
+				if(mMS.length() == 0||mJY.length() == 0||mZD.length() == 0||mXL.length() == 0){
+					Toast.makeText(getApplicationContext(), "输入有误,注意任何一项不能为空", Toast.LENGTH_SHORT).show();
+				}else{
+					mSharedPreferences = getSharedPreferences("QJMO",MODE_PRIVATE);
+					mEditor = mSharedPreferences.edit();
+					mEditor.putString("mQJ_MS", mMS);
+					mEditor.putString("mQJ_JY", mJY);
+					mEditor.putString("mQJ_ZD", mZD);
+					mEditor.putString("mQJ_XL", mXL);
+					mEditor.commit();
+				}
+			}
+			
+		}).setNegativeButton("取消", null).show();
+	}
+
+}

+ 562 - 0
src/com/ldci/t56/mobile/safe/MessageActivity.java

@@ -0,0 +1,562 @@
+package com.ldci.t56.mobile.safe;
+
+import java.util.ArrayList;
+
+import android.app.AlertDialog;
+import android.app.TabActivity;
+import android.content.BroadcastReceiver;
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.OperationApplicationException;
+import android.content.DialogInterface.OnClickListener;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.provider.ContactsContract;
+import android.provider.Contacts.Phones;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.RelativeLayout;
+import android.widget.TabHost;
+import android.widget.Toast;
+import android.widget.AdapterView.OnItemLongClickListener;
+import android.widget.TabHost.OnTabChangeListener;
+
+import com.ldci.t56.mobile.db.DbAdapter;
+import com.ldci.t56.mobile.info.Message_Forbid_Info;
+import com.ldci.t56.mobile.tool.BroadCastTool;
+
+public class MessageActivity extends TabActivity implements OnTabChangeListener {
+	
+	private DbAdapter mDbAdapter;
+	private Cursor mCursorTab1;
+	private Cursor mCursorTab2;
+	private ListView mListViewTab1;
+	private ListView mListViewTab2;
+	private static final int MENU_RUBBISH_BACK = Menu.FIRST;
+	private static final int MENU_RUBBISH_REPLY = Menu.FIRST+1;
+	private static final int MENU_RUBBISH_CALL = Menu.FIRST+2;
+	private static final int MENU_RUBBISH_DELETE = Menu.FIRST+3;
+	private static final int MENU_RUBBISH_MULTIPLE = Menu.FIRST+4;
+	
+	private static final int MENU_FORBID_REPLY = Menu.FIRST+5;
+	private static final int MENU_FORBID_CALL = Menu.FIRST+6;
+	private static final int MENU_FORBID_DELETE = Menu.FIRST+7;
+	private static final int MENU_FORBID_MULTIPLE = Menu.FIRST+8;
+	private static final int MENU_FORBID_ADD = Menu.FIRST+9;
+	private static final int MENU_FORBID_ADD_FIRST = Menu.FIRST+10;
+
+	private static final int MENU_ADD_CANTACT = Menu.FIRST+11;
+	
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.tabhost_public);
+		initFindViewById();
+		TabHost mTabHost=getTabHost();
+		mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("拦截记录",getResources().getDrawable(R.drawable.tab_icon_1)).setContent(R.id.tabhost_public_listview));
+		mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("黑名单",getResources().getDrawable(R.drawable.tab_icon_2)).setContent(R.id.tabhost_public_listview_tab2));
+		mTabHost.setOnTabChangedListener(this);
+		mTabHost.setCurrentTab(0);
+
+		mDbAdapter = new DbAdapter(MessageActivity.this);
+		mDbAdapter.open();
+		
+		initTab1Data();
+		initTabListViewListener(mListViewTab1);
+	}
+	
+	private MyBroadCastReceiver mMBCR;
+	private IntentFilter mIF;
+	@Override
+	protected void onResume(){
+		super.onResume();
+		mIF = new IntentFilter();
+		mIF.addAction(BroadCastTool.SMS_RECEIVED_ACTION);
+		mMBCR = new MyBroadCastReceiver();
+		this.registerReceiver(mMBCR, mIF);
+	}
+	
+	@Override
+	protected void onDestroy(){
+		super.onDestroy();
+		this.unregisterReceiver(mMBCR);
+		mDbAdapter.close();
+	}
+	/** 打電話*/
+	Intent mIntent;
+	private void actionCALL(int position, Cursor c,String column){
+		c.moveToPosition(position);
+		Uri uri = Uri.parse("tel:"+c.getString(c.getColumnIndex(column)));
+		mIntent = new Intent(Intent.ACTION_CALL, uri);   
+		startActivity(mIntent);   
+	}
+	/**發短信 */
+	private void actionSMS(int position, Cursor c,String column){
+		c.moveToPosition(position);
+		mIntent = new Intent(Intent.ACTION_VIEW);
+		mIntent.putExtra("address", c.getString(c.getColumnIndex(column)));
+		mIntent.setType("vnd.android-dir/mms-sms");
+		startActivity(mIntent);   
+	}
+	/** 刪除標記*/
+	private void delMarkItemData(ListView lv,Cursor c,String table){
+		int mContant = lv.getCount();
+		for(int i=0;i!=mContant;i++){
+			if(lv.getCheckedItemPositions().get(i)){
+				c.moveToPosition(i);
+				long rowId = c.getLong(c.getColumnIndex(DbAdapter.TABLE_ID));
+				mDbAdapter.getDel(rowId, table);
+			}
+		}
+	}
+	private void returnMessage(){
+		for(int i=0;i!=mListViewTab1.getCount();i++){
+			if(mListViewTab1.getCheckedItemPositions().get(i)){
+				
+				ContentValues cv = new ContentValues();    
+				cv.put("type", "1"); 
+				mCursorTab1.moveToPosition(i);
+				cv.put("address", mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_PHONE)));  
+				String rowContent = mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_CONTENT));
+				cv.put("body", rowContent); 
+				getContentResolver().insert(Uri.parse("content://sms/inbox"), cv); 
+				long rowId = mCursorTab1.getLong(mCursorTab1.getColumnIndex(DbAdapter.TABLE_ID));
+				mDbAdapter.getDel(rowId, DbAdapter.MESSAGE_RUBBISH_TABLE_NAME);
+			}
+		}
+	}
+	private String getPhoneNumber(int position,Cursor c){		
+		c.moveToPosition(position);
+		return c.getString(c.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_PHONE)); 
+	}
+	EditText mCallName;
+	EditText mCallNumber;
+	private void addContact(String phone){
+		LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+		LinearLayout mLL = (LinearLayout)mLI.inflate(R.layout.set_call_record_name, null);
+		mCallName = (EditText)mLL.findViewById(R.id.EditText01);
+		mCallNumber = (EditText)mLL.findViewById(R.id.EditText02);
+		mCallNumber.setText(phone);
+		new AlertDialog.Builder(this).setTitle("加入联系人").
+		setView(mLL).
+		setPositiveButton("确定", new OnClickListener() {
+			@Override
+			public void onClick(DialogInterface dialog, int which) {
+				if(mCallName.getText().toString().length() != 0&&mCallNumber.getText().toString().length() != 0){
+					
+					ContentValues cv = new ContentValues();
+					ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
+					ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
+					builder.withValues(cv);
+					operationList.add(builder.build());
+					builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
+					builder.withValueBackReference(StructuredName.RAW_CONTACT_ID, 0);
+	                builder.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+	                builder.withValue(StructuredName.DISPLAY_NAME, mCallName.getText().toString());
+	                operationList.add(builder.build());
+	                builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
+	                builder.withValueBackReference(Phone.RAW_CONTACT_ID, 0);
+	                builder.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+	                builder.withValue(Phone.NUMBER, mCallNumber.getText().toString());
+	                builder.withValue(Data.IS_PRIMARY, 1);
+	                operationList.add(builder.build());
+	                try {
+	                	getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList);
+					} catch (RemoteException e) {
+						e.printStackTrace();
+					} catch (OperationApplicationException e) {
+						e.printStackTrace();
+					}
+					Toast.makeText(getApplicationContext(), "成功添加!", Toast.LENGTH_SHORT).show();
+				}else{
+					Toast.makeText(getApplicationContext(), "姓名或号码不能为空!", Toast.LENGTH_SHORT).show();
+					addContact(mCallNumber.getText().toString());
+				}
+			}
+		}).setNegativeButton("取消", null).create().show();
+	}
+	
+	/** 多选时打电话只拨打第一个被选中的号码,发短信给第一个被选中的号码发送*/
+	private void callMethod(ListView lv,String sms_call,Cursor c,String column,String addContact){
+		if(lv.getCheckedItemPositions().size() >= 1){
+			for(int i=0;i!=lv.getCount();i++){
+				if(lv.getCheckedItemPositions().get(i)){
+					c.moveToPosition(i);
+					String phone = c.getString(c.getColumnIndex(column));
+					if(sms_call.equals("sms")){
+						if("addContact".equals(addContact)){
+							addContact(phone);
+						}else{
+							mIntent = new Intent(Intent.ACTION_VIEW);
+							mIntent.putExtra("address", phone);
+							mIntent.setType("vnd.android-dir/mms-sms");
+							startActivity(mIntent);  
+						} 
+					}else if(sms_call.equals("call")){
+						if("addContact".equals(addContact)){
+							addContact(phone);
+						}else{
+							Uri uri = Uri.parse("tel:"+phone);
+							mIntent = new Intent(Intent.ACTION_DIAL, uri);   
+							startActivity(mIntent);
+						}
+					}
+					break;
+				}
+			}
+		}
+	}
+	
+	/**-------------------------------初始化基本组件--------------------------------------------------------------------------------------------------*/
+	private void initFindViewById(){
+		mListViewTab1 = (ListView)findViewById(R.id.tabhost_public_listview);
+		mListViewTab2 = (ListView)findViewById(R.id.tabhost_public_listview_tab2);
+	}
+	
+	/**-------------------------------点击不同标签时的事件监听 ----------------------------------------------------------------------------------*/
+	private boolean isCheckedTab1OrTab2 = false;
+	public void onTabChanged(String tabId) {
+		if("tab1".equals(tabId)){
+			isCheckedTab1OrTab2 = false;
+			initTab1Data();
+		}else if("tab2".equals(tabId)){
+			isCheckedTab1OrTab2 = true;
+			initTab2Data();
+		}
+	}
+	
+	private int i = 0;
+	/**---------------------------------------------从数据库中获得并加载垃圾短信数据Start-------------------------------------------------*/
+	
+	private void initTab1Data(){
+		mCursorTab1=mDbAdapter.getAll(DbAdapter.MESSAGE_RUBBISH_TABLE_NAME)	;
+		this.stopManagingCursor(mCursorTab1);
+		i = 0;
+		int mCount = mCursorTab1.getCount();
+		if(mCount >= 0){
+			mArray = new String[mCount];
+			if(mCursorTab1.moveToFirst()){
+				do{
+					mArray[i] = "垃圾号码:"+mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_PHONE))+"\n"+ 
+										 "收件时间:"+mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_TIME))+"\n\n"+
+										 "短信内容:\n"+mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_CONTENT));
+					i++;
+				}while(mCursorTab1.moveToNext());
+			}
+			ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(MessageActivity.this,android.R.layout.simple_list_item_checked,mArray);
+			mListViewTab1.setAdapter(mAdapter);
+			mListViewTab1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+		}
+		
+	}
+	
+	String[] mArray;
+	private void initTab2Data(){
+		mCursorTab2 = mDbAdapter.getAll(DbAdapter.MESSAGE_FORBID_TABLE_NAME);
+		this.startManagingCursor(mCursorTab2);		
+		i = 0;
+		int mCount = mCursorTab2.getCount();
+		if(mCount >= 0){
+			mArray = new String[mCount];
+			if(mCursorTab2.moveToFirst()){
+				do{
+					mArray[i] = mCursorTab2.getString(mCursorTab2.getColumnIndex(DbAdapter.MESSAGE_FORBID_PHONE));
+					i++;
+				}while(mCursorTab2.moveToNext());
+			}
+			ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(MessageActivity.this,android.R.layout.simple_list_item_checked,mArray);
+			mListViewTab2.setAdapter(mAdapter);
+			mListViewTab2.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+		}
+		
+	}
+	/*---------------------------------------------从数据库中获得并加载垃圾短信数据End----------------------------------------------------*/
+	
+	/**---------------------------------------------列表项的长按事件监听Start---------------------------------------------------------------------*/
+	private void initTabListViewListener(final ListView listview){
+//		listview.setOnItemClickListener(new OnItemClickListener(){//单击事件监听
+//			public void onItemClick(AdapterView<?> arg0, View arg1, int position,
+//					long id) {
+				
+//			}
+//		});
+		listview.setOnItemLongClickListener(new OnItemLongClickListener(){//长按事件监听
+			@Override
+			public boolean onItemLongClick(AdapterView<?> parent, View view,
+					int position, long id) {
+				Toast.makeText(MessageActivity.this, mArray[position], Toast.LENGTH_LONG).show();
+				return false;
+			}
+		});
+	}
+	/*---------------------------------------------列表项的长按事件监听End---------------------------------------------------------------------*/
+	
+	/*--------------------------------------------------------------------------------------关于动态菜单Begin---------------------------------------*/
+	boolean isCreatePreparedOptionMenu1 = true;
+	boolean isCreatePreparedOptionMenu2 = false;
+	boolean isCreatePreparedOptionMenu3 = false;
+	@Override
+	public boolean onPrepareOptionsMenu(Menu menu) {
+		if(isCheckedTab1OrTab2 == false){
+			isCreatePreparedOptionMenu3 = false;
+			if(mListViewTab1.getCount()>0){
+				if(isCreatePreparedOptionMenu1){
+					menu.add(0, MENU_RUBBISH_REPLY, 0, "回复").setIcon(android.R.drawable.ic_menu_send);
+					menu.add(0, MENU_RUBBISH_CALL, 0, "拨打").setIcon(android.R.drawable.ic_menu_call);
+					menu.add(0, MENU_RUBBISH_DELETE, 0, "删除").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
+					menu.add(0, MENU_RUBBISH_MULTIPLE, 0, "清空").setIcon(android.R.drawable.ic_menu_delete);
+					menu.add(0, MENU_RUBBISH_BACK, 0, "恢复").setIcon(android.R.drawable.ic_menu_rotate);
+					menu.add(0, MENU_ADD_CANTACT, 0, "加入联系人").setIcon(android.R.drawable.ic_menu_add);
+					isCreatePreparedOptionMenu1 = false;
+				}
+			}else{
+				menu.removeItem(MENU_RUBBISH_BACK);
+				menu.removeItem(MENU_RUBBISH_REPLY);
+				menu.removeItem(MENU_RUBBISH_CALL);
+				menu.removeItem(MENU_RUBBISH_DELETE);
+				menu.removeItem(MENU_RUBBISH_MULTIPLE);
+				menu.removeItem(MENU_ADD_CANTACT);
+				isCreatePreparedOptionMenu1 = true;
+			}
+		}else{
+			menu.removeItem(MENU_RUBBISH_BACK);
+			menu.removeItem(MENU_RUBBISH_REPLY);
+			menu.removeItem(MENU_RUBBISH_CALL);
+			menu.removeItem(MENU_RUBBISH_DELETE);
+			menu.removeItem(MENU_RUBBISH_MULTIPLE);
+			menu.removeItem(MENU_ADD_CANTACT);
+			isCreatePreparedOptionMenu1 = true;
+		}
+		
+		if(isCheckedTab1OrTab2 == true){
+			if(mListViewTab2.getCount()>0){
+				if(!isCreatePreparedOptionMenu2){
+					menu.add(0, MENU_FORBID_ADD, 0, "添加").setIcon(android.R.drawable.ic_menu_add);
+					menu.add(0, MENU_FORBID_REPLY, 0, "回复").setIcon(android.R.drawable.ic_menu_send);
+					menu.add(0, MENU_FORBID_CALL, 0, "拨打").setIcon(android.R.drawable.ic_menu_call);
+					menu.add(0, MENU_FORBID_DELETE, 0, "删除").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
+					menu.add(0, MENU_FORBID_MULTIPLE, 0, "清空").setIcon(android.R.drawable.ic_menu_delete);
+					isCreatePreparedOptionMenu2 = true;
+				}
+				menu.removeItem(MENU_FORBID_ADD_FIRST);
+				isCreatePreparedOptionMenu3 = false;
+			}else{
+				if(!isCreatePreparedOptionMenu3){
+					menu.add(0, MENU_FORBID_ADD_FIRST, 0, "添加").setIcon(android.R.drawable.ic_menu_add);
+					isCreatePreparedOptionMenu3 = true;
+				}
+				menu.removeItem(MENU_FORBID_REPLY);
+				menu.removeItem(MENU_FORBID_CALL);
+				menu.removeItem(MENU_FORBID_DELETE);
+				menu.removeItem(MENU_FORBID_MULTIPLE);
+				menu.removeItem(MENU_FORBID_ADD);
+				isCreatePreparedOptionMenu2 = false;
+			}
+		}else{
+			menu.removeItem(MENU_FORBID_REPLY);
+			menu.removeItem(MENU_FORBID_CALL);
+			menu.removeItem(MENU_FORBID_DELETE);
+			menu.removeItem(MENU_FORBID_MULTIPLE);
+			menu.removeItem(MENU_FORBID_ADD);
+			menu.removeItem(MENU_FORBID_ADD_FIRST);
+			isCreatePreparedOptionMenu2 = false;
+		}
+		return super.onPrepareOptionsMenu(menu);
+	}
+
+	@Override
+	public boolean onOptionsItemSelected(MenuItem item) {
+		int positionTab1 = mListViewTab1.getSelectedItemPosition();
+		int positionTab2 = mListViewTab2.getSelectedItemPosition();
+		switch(item.getItemId()){
+		case MENU_RUBBISH_REPLY:
+			if(positionTab1 != -1){
+				actionSMS(positionTab1,mCursorTab1,DbAdapter.MESSAGE_RUBBISH_PHONE);
+			}else{
+				callMethod(mListViewTab1,"sms",mCursorTab1,DbAdapter.MESSAGE_RUBBISH_PHONE,"");
+			}
+			break;
+		case MENU_RUBBISH_CALL:
+			if(positionTab1 != -1){
+				actionCALL(positionTab1,mCursorTab1,DbAdapter.MESSAGE_RUBBISH_PHONE);
+			}else{
+				callMethod(mListViewTab1,"call",mCursorTab1,DbAdapter.MESSAGE_RUBBISH_PHONE,"");
+			}
+			break;
+		case MENU_RUBBISH_DELETE:
+			if(positionTab1 != -1){
+				mCursorTab1.moveToPosition(positionTab1);
+				long rowId = mCursorTab1.getLong(mCursorTab1.getColumnIndex(DbAdapter.TABLE_ID));
+				mDbAdapter.getDel(rowId, DbAdapter.MESSAGE_RUBBISH_TABLE_NAME);
+			}else{
+				delMarkItemData(mListViewTab1,mCursorTab1,DbAdapter.MESSAGE_RUBBISH_TABLE_NAME);
+			}
+			initTab1Data();
+			break;
+		case MENU_RUBBISH_MULTIPLE:
+			mDbAdapter.deleteTable(DbAdapter.MESSAGE_RUBBISH_TABLE_NAME);
+			initTab1Data();
+			break;
+		case MENU_RUBBISH_BACK:
+			returnMessage();
+			initTab1Data();
+			break;
+		case MENU_FORBID_ADD:
+		case MENU_FORBID_ADD_FIRST:
+			addForbidPhone();
+			break;
+		case MENU_FORBID_REPLY:
+			if(positionTab2 != -1){
+				actionSMS(positionTab2,mCursorTab2,DbAdapter.MESSAGE_FORBID_PHONE);
+			}else{
+				callMethod(mListViewTab2,"sms",mCursorTab2,DbAdapter.MESSAGE_FORBID_PHONE,"");
+			}
+			break;
+		case MENU_FORBID_CALL:
+			if(positionTab2 != -1){
+				actionCALL(positionTab2,mCursorTab2,DbAdapter.MESSAGE_FORBID_PHONE);
+			}else{
+				callMethod(mListViewTab2,"call",mCursorTab2,DbAdapter.MESSAGE_FORBID_PHONE,"");
+			}
+			break;
+		case MENU_FORBID_DELETE:
+			if(positionTab2 != -1){
+				mCursorTab2.moveToPosition(positionTab2);
+				long rowId = mCursorTab2.getLong(mCursorTab2.getColumnIndex(DbAdapter.TABLE_ID));
+				mDbAdapter.getDel(rowId, DbAdapter.MESSAGE_FORBID_TABLE_NAME);
+			}else{
+				delMarkItemData(mListViewTab2,mCursorTab2,DbAdapter.MESSAGE_FORBID_TABLE_NAME);
+			}
+			initTab2Data();
+			break;
+		case MENU_FORBID_MULTIPLE:
+			mDbAdapter.deleteTable(DbAdapter.MESSAGE_FORBID_TABLE_NAME);
+			initTab2Data();
+			break;
+		case MENU_ADD_CANTACT:
+			if(positionTab1 != -1){
+				addContact(getPhoneNumber(positionTab1, mCursorTab1));
+			}else{
+				callMethod(mListViewTab1,"sms",mCursorTab1,DbAdapter.MESSAGE_RUBBISH_PHONE,"addContact");
+			}
+			break;
+		}
+		return super.onOptionsItemSelected(item);
+	}
+	/*--------------------------------------------------------------------------------------关于动态菜单End----------------------------------------------*/
+	
+	/*--------------------------------------------------------------------------------------接收到垃圾短信时的广播接收器Begin------------------*/
+	class MyBroadCastReceiver extends BroadcastReceiver{
+		@Override
+		public void onReceive(Context context, Intent intent) {
+			if(intent.getAction().equals(BroadCastTool.SMS_RECEIVED_ACTION)){
+				initTab1Data();
+			}
+		}
+	}
+	/*--------------------------------------------------------------------------------------接收到垃圾短信时的广播接收器End---------------------*/
+	
+	/**---------------------------------------------------------------------------------------添加黑名单的Dialog-------------------------------------------*/
+	EditText mForbidPhone ;
+	private void addForbidPhone(){
+		LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+		RelativeLayout mRL = (RelativeLayout)mLI.inflate(R.layout.message_forbid_add, null);
+		mForbidPhone = (EditText)mRL.findViewById(R.id.new_forbid_phone);
+		Button mButton=(Button)mRL.findViewById(R.id.get_system_contact);
+		mButton.setOnClickListener(new View.OnClickListener() {
+			
+			@Override
+			public void onClick(View v) {
+				showMulitAlertDialog();
+			}
+		});
+		new AlertDialog.Builder(MessageActivity.this).setTitle("添加黑名单").setView(mRL)
+		.setPositiveButton("确定", new OnClickListener(){
+			public void onClick(DialogInterface arg0, int arg1) {
+				
+				String mNewForbidPhone = mForbidPhone.getText().toString();
+				
+				if(mNewForbidPhone.length() < 3){
+					Toast.makeText(MessageActivity.this, "输入错误!", Toast.LENGTH_SHORT).show();
+				}else{
+					String mStr[] = mNewForbidPhone.split(";");
+					for(int i = 0;i != mStr.length;i++){
+						String phone = mStr[i].split(":").length == 1?mStr[i].split(":")[0]:mStr[i].split(":")[1];
+						if(!(mDbAdapter.getPhone(phone, 2)).moveToFirst()){
+							Message_Forbid_Info mMFI = new Message_Forbid_Info();
+							mMFI.setMessage_forbid_phone(phone);
+							mDbAdapter.getAdd(mMFI);
+						}else{
+							Toast.makeText(MessageActivity.this, "号码"+phone+"已存在!", Toast.LENGTH_SHORT).show();
+						}
+					}
+					initTab2Data();
+					Toast.makeText(MessageActivity.this, "添加成功!", Toast.LENGTH_SHORT).show();
+				}
+			}
+		}).setNegativeButton("取消", null).show();
+	}
+	
+	private ListView mLV;
+	@SuppressWarnings("deprecation")
+	private void showMulitAlertDialog(){
+		Cursor mCursor=getContentResolver().query(Phones.CONTENT_URI, new String[]{"_id","name","number"}, null, null, "number desc");
+		startManagingCursor(mCursor);
+		if(mCursor.moveToFirst()){
+			int m = 0;
+			String mContant[] = new String[mCursor.getCount()];
+			do{
+				String phoneNumber = mCursor.getString(mCursor.getColumnIndex(Phones.NUMBER));
+				mContant[m] = mCursor.getString(mCursor.getColumnIndex(Phones.NAME))+":"+(phoneNumber.length() == 13?phoneNumber.substring(2):phoneNumber);
+				m++;
+			}while(mCursor.moveToNext());
+			initListData(mContant);
+		}
+	}
+	
+	String checkInfo;
+	private void initListData(final String[] contant){
+		AlertDialog mAlertDialog=new AlertDialog.Builder(this).setMultiChoiceItems(contant,
+				new boolean[contant.length], 
+				new DialogInterface.OnMultiChoiceClickListener() {
+					
+					@Override
+					public void onClick(DialogInterface dialog, int which, boolean isChecked) {
+						
+					}
+				}).setPositiveButton("确定", new DialogInterface.OnClickListener() {	
+					
+					@Override
+					public void onClick(DialogInterface dialog, int which) {
+						checkInfo = "";
+						for(int i=0;i!=contant.length;i++){
+							if(mLV.getCheckedItemPositions().get(i)){
+								checkInfo += mLV.getAdapter().getItem(i).toString()+";";
+							}
+						}
+						mForbidPhone.setText(checkInfo.substring(0, checkInfo.length()));
+					}
+				}).setNegativeButton("取消", null).create();
+		mLV=mAlertDialog.getListView();
+		mAlertDialog.show();
+	}
+
+}

+ 188 - 0
src/com/ldci/t56/mobile/safe/SensitiveActivity.java

@@ -0,0 +1,188 @@
+package com.ldci.t56.mobile.safe;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.app.AlertDialog;
+import android.app.ListActivity;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.SharedPreferences;
+import android.content.DialogInterface.OnClickListener;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.ArrayAdapter;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.Toast;
+
+public class SensitiveActivity extends ListActivity {
+	
+	private List<String> mList = new ArrayList<String>();
+	private StringBuilder mStringBuilder = new StringBuilder();
+	private SharedPreferences mSharedPreferences;
+	public final int SENSITIVE_ADD = Menu.FIRST;
+	public final int SENSITIVE_DELETE = Menu.FIRST+1;
+	public final int SENSITIVE_MULTIPLE = Menu.FIRST+2;
+	public static int single_or_multiple = 1;
+	
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		mSharedPreferences = this.getSharedPreferences("SharedPreferences", Context.MODE_PRIVATE);
+		Log.d("debug", "mSharedPreferences is "+mSharedPreferences.getString("sensitive", ""));
+		String xmlInfo = mSharedPreferences.getString("sensitive", "");
+		if(xmlInfo.length() != 0){
+			String[] mArray = xmlInfo.substring(0, xmlInfo.length()-1).split(",");
+			for(int i = 0;i != mArray.length;i++){
+				Log.d("debug", "mArray["+i+"] is "+mArray[i]);
+				mList.add(mArray[i]);
+			}
+			singleMode(mArray);
+		}
+	}
+	
+	@Override
+	protected void onDestroy(){
+		super.onDestroy();
+		for(int i = 0; i != mList.size();i++){
+			mStringBuilder.append(mList.get(i));
+			mStringBuilder.append(",");
+		}
+		mSharedPreferences = this.getSharedPreferences("SharedPreferences", Context.MODE_PRIVATE);
+		SharedPreferences.Editor mEditor = mSharedPreferences.edit();
+		mEditor.putString("sensitive", mStringBuilder.toString());
+		mEditor.commit();
+	}
+	
+	private void initListData(){
+		
+		String[] mArray = new String[mList.size()];
+		for(int i = 0; i != mList.size();i++){
+			mArray[i] = mList.get(i);
+		}
+		if(single_or_multiple == 1){
+			singleMode(mArray);
+		}else if(single_or_multiple == 2){
+			multipleMode(mArray);
+		}
+	}
+	
+	@Override
+	public boolean onCreateOptionsMenu(Menu menu) {
+		menu.addSubMenu(0, SENSITIVE_ADD, 0, "添加").setIcon(android.R.drawable.ic_menu_add);
+		return super.onCreateOptionsMenu(menu);
+	}
+
+	boolean isCreateOptionsMenu = false;
+	@Override
+	public boolean onPrepareOptionsMenu(Menu menu) {
+		if(getListView().getCount() > 0){
+			if(isCreateOptionsMenu == false){
+				menu.addSubMenu(0, SENSITIVE_DELETE, 0, "删除").setIcon(android.R.drawable.ic_menu_delete);
+				menu.addSubMenu(0, SENSITIVE_MULTIPLE, 0, "多选").setIcon(android.R.drawable.ic_menu_manage);
+				isCreateOptionsMenu = true;
+			}
+		}else{
+			menu.removeItem(SENSITIVE_DELETE);
+			menu.removeItem(SENSITIVE_MULTIPLE);
+			isCreateOptionsMenu = false;
+		}
+		return super.onPrepareOptionsMenu(menu);
+	}
+
+	@Override
+	public boolean onOptionsItemSelected(MenuItem item) {
+		switch(item.getItemId()){
+		case SENSITIVE_ADD:
+			single_or_multiple = 1;
+			addSensitive();
+			break;
+		case SENSITIVE_DELETE:
+			if(single_or_multiple == 1){
+				int position = getListView().getSelectedItemPosition();
+				if(position != -1){
+					mList.remove(position);
+					initListData();
+				}
+			}else{
+				
+				
+				
+				
+				
+				
+//-------------------------------------------------------------------------------多选的删除:开始----------------------------------------------------------------			
+				Log.d("SensitiveActivity", "mList size is"+mList.size());
+				Log.d("SensitiveActivity", "checked item size is "+getListView().getCheckedItemPositions().size());
+				int m = mList.size();
+				for(int i = 0;i != m;i++){
+					if(getListView().getCheckedItemPositions().get(i)){
+						Log.d("SensitiveActivity", "item checked info is inner :"+i+" is "+getListView().getCheckedItemPositions().get(i));
+						Log.d("SensitiveActivity", "item content info is :"+i+" is "+getListView().getAdapter().getItem(i));
+						if(mList.contains(getListView().getAdapter().getItem(i))){
+							mList.remove(getListView().getAdapter().getItem(i));
+						}
+					}
+				}
+				Log.d("SensitiveActivity", "initListData start");
+				initListData();
+				Log.d("SensitiveActivity", "initListData end");
+//--------------------------------------------------------------------------------多选的删除:结束----------------------------------------------------------------				
+				
+				
+				
+				
+				
+				
+				
+				
+			}
+			break;
+		case SENSITIVE_MULTIPLE:
+			single_or_multiple = 2;
+			initListData();
+			break;
+		}
+		return super.onOptionsItemSelected(item);
+	}
+	
+	
+	/**单选模式*/
+	private void singleMode(String[] mArray){
+		ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked,mArray);
+		getListView().setAdapter(mAdapter);
+		getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+	}
+	
+	/**多选模式*/
+	private void multipleMode(String[] mArray){
+		ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, mArray);
+		getListView().setAdapter(mAdapter);
+		getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+	}
+	
+	/**添加新敏感词*/
+	private void addSensitive(){
+		LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+		LinearLayout mLL = (LinearLayout)mLI.inflate(R.layout.set_sensitive_add, null);
+		final EditText mNewSensitive = (EditText)mLL.findViewById(R.id.set_sensitive_add);
+		new AlertDialog.Builder(SensitiveActivity.this).setTitle("添加新敏感词").setMessage("请填写不多于5个汉字或5个字母,数字的组合").setView(mLL)
+		.setPositiveButton("确定", new OnClickListener(){
+			public void onClick(DialogInterface arg0, int arg1) {
+				//数据库的操作
+				if(mNewSensitive.getText().toString().length() == 0||mNewSensitive.getText().toString().length() > 5){
+					Toast.makeText(SensitiveActivity.this, "输入错误!", Toast.LENGTH_SHORT).show();
+				}else{
+					Log.d("debug", "the sensitive is "+mNewSensitive.getText().toString()+" and the length is "+mNewSensitive.getText().toString().length());
+					mList.add(mNewSensitive.getText().toString());
+					initListData();
+				}
+			}
+		}).setNegativeButton("取消", null).show();
+	}
+}

+ 312 - 0
src/com/ldci/t56/mobile/safe/SetActivity.java

@@ -0,0 +1,312 @@
+package com.ldci.t56.mobile.safe;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+
+import android.app.AlertDialog;
+import android.app.ListActivity;
+import android.app.TimePickerDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.DialogInterface.OnClickListener;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+import android.widget.TimePicker;
+import android.widget.Toast;
+import android.widget.AdapterView.OnItemClickListener;
+
+public class SetActivity extends ListActivity {
+	
+	private Intent mIntent;
+	private SharedPreferences mSharedPreferences;
+	private SharedPreferences.Editor mEditor;
+	Calendar mCalendar;
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		Log.d("debug", "onCreate");
+		mCalendar = Calendar.getInstance();
+		/*读取用SharedPreferences保存的配置文件数据*/
+		mSharedPreferences = this.getSharedPreferences("SharedPreferences", Context.MODE_PRIVATE);
+		MainActivity.mUndisturbedContent = mSharedPreferences.getString("UndisturbedMode", MainActivity.mUndisturbedContent);
+		
+		mCalendar.setTimeInMillis(mSharedPreferences.getLong("UndisturbedStartTime", System.currentTimeMillis()));
+		int hourS = mCalendar.get(Calendar.HOUR_OF_DAY);
+		int minuteS = mCalendar.get(Calendar.MINUTE);
+		MainActivity.mStartTime = (hourS < 10?"0"+hourS:hourS)+":"+(minuteS < 10?"0"+minuteS:minuteS);
+		
+		mCalendar.setTimeInMillis(mSharedPreferences.getLong("UndisturbedEndTime", System.currentTimeMillis()+60000000L));
+		int hourE = mCalendar.get(Calendar.HOUR_OF_DAY);
+		int minuteE = mCalendar.get(Calendar.MINUTE);
+		MainActivity.mEndTime = (hourE < 10?"0"+hourE:hourE)+":"+(minuteE < 10?"0"+minuteE:minuteE);
+		
+		MainActivity.isCheckBoxChecked[3] = mSharedPreferences.getBoolean("isReceiveSMS", false);
+		MainActivity.isCheckBoxChecked[4] = mSharedPreferences.getBoolean("isReceiveCall", false);
+		MainActivity.isCheckBoxChecked[5] = mSharedPreferences.getBoolean("isPasswordProtected", false);
+		MainActivity.isCheckBoxChecked[6] = mSharedPreferences.getBoolean("isAutoStartWithPhone", false);
+		/*读取结束后开始适配列表数据*/
+		setListAdapter(new SetAdapter(SetActivity.this));
+		initListViewListener();
+	}
+	
+	@Override
+	protected void onDestroy(){
+		super.onDestroy();
+		mSharedPreferences = this.getSharedPreferences("SharedPreferences", Context.MODE_PRIVATE);
+		mEditor = mSharedPreferences.edit();
+		mEditor.putString("UndisturbedMode", MainActivity.mUndisturbedContent);
+		
+		int hourStart = Integer.valueOf(MainActivity.mStartTime.split(":")[0]);
+		int minuteStart = Integer.valueOf(MainActivity.mStartTime.split(":")[1]);
+		int hourEnd = Integer.valueOf(MainActivity.mEndTime.split(":")[0]);
+		int minuteEnd = Integer.valueOf(MainActivity.mEndTime.split(":")[1]);
+		
+		mCalendar.setTimeInMillis(System.currentTimeMillis());
+		mCalendar.set(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), hourStart, minuteStart);
+		mEditor.putLong("UndisturbedStartTime", mCalendar.getTimeInMillis());
+		Log.d("yejian", "UndisturbedStartTime:"+mCalendar.getTimeInMillis());
+		if((hourStart == hourEnd&&minuteStart > minuteEnd)||hourStart > hourEnd){
+			mCalendar.set(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH)+1, hourEnd, minuteEnd);
+			Log.d("yejian", "1-------"+mCalendar.getTimeInMillis());
+		}else{
+			mCalendar.set(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), hourEnd, minuteEnd);
+			Log.d("yejian", "2-------"+mCalendar.getTimeInMillis());
+		}
+		mEditor.putLong("UndisturbedEndTime", mCalendar.getTimeInMillis());
+		Log.d("yejian", "UndisturbedEndTime:"+mCalendar.getTimeInMillis());
+		
+		mEditor.putBoolean("isReceiveSMS", MainActivity.isCheckBoxChecked[3]);
+		mEditor.putBoolean("isReceiveCall", MainActivity.isCheckBoxChecked[4]);
+		mEditor.putBoolean("isPasswordProtected", MainActivity.isCheckBoxChecked[5]);
+		mEditor.putBoolean("isAutoStartWithPhone", MainActivity.isCheckBoxChecked[6]);
+		mEditor.commit();
+	}
+	
+	
+	/**ListView的点击事件监听*/
+	private void initListViewListener(){
+		getListView().setOnItemClickListener(new OnItemClickListener(){
+
+			public void onItemClick(AdapterView<?> arg0, View view, int position,
+					long arg3) {
+				CheckBox mCheckBox = (CheckBox) view.findViewById(R.id.set_checkbox);
+				if(!mCheckBox.isChecked()){
+					MainActivity.isCheckBoxChecked[position] = true;
+					mCheckBox.setChecked(true);
+				}else{
+					MainActivity.isCheckBoxChecked[position] = false;
+					mCheckBox.setChecked(false);
+				}
+				switch(position){
+					case 0:
+						initUnDisturbedDialog();
+						break;
+					case 1:
+						String mStartTime[] = MainActivity.mStartTime.split(":");
+						setUndisturbedTime(1,mStartTime[0],mStartTime[1]);
+						break;
+					case 2:
+						String mEndTime[] = MainActivity.mEndTime.split(":");
+						setUndisturbedTime(2,mEndTime[0],mEndTime[1]);
+						break;
+					case 5:
+						protectDialog(mCheckBox);
+						break;
+					case 7:
+						
+						break;
+					case 8:
+						mIntent = new Intent(SetActivity.this, SensitiveActivity.class);
+						SetActivity.this.startActivity(mIntent);
+						break;
+				}
+			}
+			
+		});
+	}
+	
+	/**密码保护*/
+	private void protectDialog(CheckBox checkbox){
+		if(checkbox.isChecked()){
+			LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+			final LinearLayout mLL = (LinearLayout)mLI.inflate(R.layout.set_protected, null);
+			final EditText mPW_Enter = (EditText)mLL.findViewById(R.id.protected_pw_enter);
+			final EditText mPW_Confirm = (EditText)mLL.findViewById(R.id.protected_pw_confirm);
+			final EditText mPW_Question = (EditText)mLL.findViewById(R.id.protected_pw_question);
+			final EditText mPW_Answer = (EditText)mLL.findViewById(R.id.protected_pw_answer);
+			new AlertDialog.Builder(SetActivity.this).setTitle("密码保护设置").setView(mLL)
+			.setPositiveButton("确定", new OnClickListener(){
+				public void onClick(DialogInterface arg0, int arg1) {
+					String pw_enter = mPW_Enter.getText().toString();
+					String pw_confirm = mPW_Confirm.getText().toString();
+					String pw_question = mPW_Question.getText().toString();
+					String pw_answer = mPW_Answer.getText().toString();
+					if(mPW_Enter.length()!=0&&mPW_Confirm.length()!=0&&mPW_Question.length()!=0&&mPW_Answer.length()!=0&&pw_enter.equals(pw_confirm)){
+						mSharedPreferences = getSharedPreferences("SharedPreferences", Context.MODE_PRIVATE);
+						SharedPreferences.Editor mEditor = mSharedPreferences.edit();
+						mEditor.putString("mPW", pw_enter);
+						mEditor.putString("mPW_Question", pw_question);
+						mEditor.putString("mPW_Answer", pw_answer);
+						mEditor.commit();
+					}else{
+						Toast.makeText(SetActivity.this, "输入错误!", Toast.LENGTH_LONG).show();
+						canclePwProtected();
+					}
+				}
+			}).setNegativeButton("取消", new OnClickListener(){
+				public void onClick(DialogInterface arg0, int arg1) {
+					canclePwProtected();
+				}
+			}).show();	
+		}
+	}
+	
+	/**取消密码保护选中状态*/
+	private void canclePwProtected(){
+		MainActivity.isCheckBoxChecked[5] = false;
+		setListAdapter(new SetAdapter(SetActivity.this));
+	}
+	
+	String hourStr;
+	String minuteStr;
+	/**时间设置*/
+	private void setUndisturbedTime(final int start_or_end,String hour,String minute){
+		
+		new TimePickerDialog(SetActivity.this, new TimePickerDialog.OnTimeSetListener(){
+
+			public void onTimeSet(TimePicker view, int hour,
+					int minute) {
+				String mStartTime[] = MainActivity.mStartTime.split(":");
+				String mEndTime[] = MainActivity.mEndTime.split(":");
+				if(start_or_end == 1){
+					hourStr = (hour<10?"0"+hour:""+hour);
+					minuteStr = (minute<10?"0"+minute:""+minute);
+					if(hourStr.equals(mEndTime[0])&&minuteStr.equals(mEndTime[1])){
+						Toast.makeText(getApplicationContext(), "不能输入一样的时间!", Toast.LENGTH_SHORT).show();
+						setUndisturbedTime(1,mStartTime[0],mStartTime[1]);
+					}else{
+						MainActivity.mStartTime = hourStr+":"+minuteStr;
+					}
+				}else{
+					hourStr = (hour<10?"0"+hour:""+hour);
+					minuteStr = (minute<10?"0"+minute:""+minute);
+					if(mStartTime[0].equals(hourStr)&&mStartTime[1].equals(minuteStr)){
+						Toast.makeText(getApplicationContext(), "不能输入一样的时间!", Toast.LENGTH_SHORT).show();
+						setUndisturbedTime(2,mEndTime[0],mEndTime[1]);
+					}else{
+						MainActivity.mEndTime = hourStr+":"+minuteStr;
+					}
+				}
+				setListAdapter(new SetAdapter(SetActivity.this));
+			}
+			
+		},Integer.valueOf(hour),Integer.valueOf(minute),true).show();
+	}
+
+	/**夜间免扰模式选择框,包含拦截短信,拦截电话,拦截短信和电话以及关闭*/
+	private void initUnDisturbedDialog(){
+		LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+		LinearLayout mLL = (LinearLayout)mLI.inflate(R.layout.set_undisturbed, null);
+		final RadioGroup mRG = (RadioGroup)mLL.findViewById(R.id.RadioGroup01);
+		final RadioButton mRB1 = (RadioButton)mLL.findViewById(R.id.RadioButton01);
+		final RadioButton mRB2 = (RadioButton)mLL.findViewById(R.id.RadioButton02);
+		final RadioButton mRB3 = (RadioButton)mLL.findViewById(R.id.RadioButton03);
+		final RadioButton mRB4 = (RadioButton)mLL.findViewById(R.id.RadioButton04);
+		RadioGroup.OnCheckedChangeListener mOCCL = new RadioGroup.OnCheckedChangeListener(){
+
+			public void onCheckedChanged(RadioGroup arg0, int arg1) {
+				if(arg1 == mRB1.getId()){
+					MainActivity.mUndisturbedContent = "拦截短信";
+				}else if(arg1 == mRB2.getId()){
+					MainActivity.mUndisturbedContent = "拦截电话";
+				}else if(arg1 == mRB3.getId()){
+					MainActivity.mUndisturbedContent = "拦截短信和电话";
+				}else if(arg1 == mRB4.getId()){
+					MainActivity.mUndisturbedContent = "关闭";
+				}
+			}
+			
+		};
+		mRG.setOnCheckedChangeListener(mOCCL);
+		
+		new AlertDialog.Builder(this).setTitle("请选择!").setView(mLL)
+				.setPositiveButton("确定", new OnClickListener(){
+					public void onClick(DialogInterface arg0, int arg1) {
+						setListAdapter(new SetAdapter(SetActivity.this));
+					}
+				}).show();
+	}
+	
+	/**自定义适配器*/
+	class SetAdapter extends BaseAdapter{
+		
+		private ArrayList<Map<String, String>> mList = new  ArrayList<Map<String, String>>();
+		private Map<String, String> mMap;
+		private String[] mTitle = {"夜间免扰模式","开始时间设置","结束时间设置","拒收短信","拒接电话","密码保护","开机启动","自动IP拨号","敏感词设置"};
+		private String[] mContent = {MainActivity.mUndisturbedContent,MainActivity.mStartTime,MainActivity.mEndTime,"屏蔽一切短信","不接受任何人的骚扰","设置密码更安全","开机启动更方便","IP拨号小助手","自定义您的敏感词库"};
+		
+		public SetAdapter(Context context){
+			Log.d("debug", "SetAdapter");
+			initListData();
+		}
+		
+		public void initListData(){
+			for(int i = 0; i != 9; i++){
+				mMap = new HashMap<String, String>();
+				mMap.put("set_title", mTitle[i]);
+				mMap.put("set_content", mContent[i]);
+				mList.add(mMap);
+			}
+		}
+		
+		public int getCount() {
+			return mList.size();
+		}
+
+		public Object getItem(int position) {
+			return mList.get(position);
+		}
+
+		public long getItemId(int position) {
+			return position;
+		}
+
+		public View getView(int position, View view, ViewGroup viewgroup) {
+			LayoutInflater mLI = (LayoutInflater)SetActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+			RelativeLayout mLL = (RelativeLayout)mLI.inflate(R.layout.set_listview, null);
+			TextView mTitle = (TextView)mLL.findViewById(R.id.set_title);
+			TextView mContent = (TextView)mLL.findViewById(R.id.set_content);
+			final CheckBox mCheckBox = (CheckBox)mLL.findViewById(R.id.set_checkbox);
+			mTitle.setText(mList.get(position).get("set_title"));
+			mContent.setText(mList.get(position).get("set_content"));
+			mCheckBox.setFocusable(false);//取消CheckBox的焦点
+			mCheckBox.setEnabled(false);
+			if(MainActivity.isCheckBoxChecked[position] == true){
+				mCheckBox.setChecked(true);
+			}else{
+				mCheckBox.setChecked(false);
+			}
+			if(position == 0||position == 1||position == 2||position == 7||position == 8){
+				mCheckBox.setVisibility(View.GONE);
+			}
+			return mLL;
+		}
+	}
+	
+}

+ 419 - 0
src/com/ldci/t56/mobile/tool/BroadCastTool.java

@@ -0,0 +1,419 @@
+package com.ldci.t56.mobile.tool;
+
+import java.lang.reflect.Method;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Set;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.media.AudioManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.provider.CallLog;
+import android.provider.CallLog.Calls;
+import android.telephony.PhoneStateListener;
+import android.telephony.SmsManager;
+import android.telephony.SmsMessage;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.internal.telephony.ITelephony;
+import com.ldci.t56.mobile.db.DbAdapter;
+import com.ldci.t56.mobile.info.Call_Record_Info;
+import com.ldci.t56.mobile.info.Message_Rubbish_Info;
+import com.ldci.t56.mobile.info.PhoneInfo;
+import com.ldci.t56.mobile.info.SmsInfo;
+
+/**
+ * 广播类,监听短信
+ * 
+ * @author emmet7life@yahoo.cn
+ * */
+public class BroadCastTool extends BroadcastReceiver {
+
+	String SMScontent_01;
+	String SMScontent_02;
+	static HashMap<String, PhoneInfo> mPhoneMap = new HashMap<String, PhoneInfo>();
+	static HashMap<String, SmsInfo> mSMSMap = new HashMap<String, SmsInfo>();
+
+	public static final String SMS_SYSTEM_ACTION = "android.provider.Telephony.SMS_RECEIVED";// 接收短信的ACTION标识
+	public static final String SYSTEM_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
+	public static final String SMS_RECEIVED_ACTION = "com.ldci.t56.mobile.safe.SMS_RECEIVED_ACTION";// 当收到垃圾短信时发出广播的ACTION标识
+	public static final String CALL_RECEIVED_ACTION = "com.ldci.t56.mobile.safe.CALL_RECEIVED_ACTION";// 当收到垃圾短信时发出广播的ACTION标识
+	public static final String AUTO_START_SERVICE = "com.ldci.t56.mobile.safe.AUTO_START_SERVICE";//接收系统启动的广播
+	public static String SMS_PHONENUMBER;//接收短信号码
+	public static String SMS_CONTENT;//接收短信内容
+	private DbAdapter mDbAdapter;//操作数据库
+	private ITelephony iTelephony;//挂断电话的一个对象
+	private TelephonyManager telephonyMgr;//电话管理类
+	public SharedPreferences mSharedPreferences;//存储基本数据类的共享类
+	private boolean isReceiveCall;//是否接收电话
+	private boolean isAutoStartWithPhone;//是否随系统启动
+	private boolean isReceiveSMS;//是否接收短信
+	private String mUndisturbedMode;//夜间模式信息
+
+	public BroadCastTool() {
+		SMS_PHONENUMBER = new String();
+		SMS_CONTENT = new String();
+	}
+
+	@Override
+	public void onReceive(Context context, Intent intent) {
+		// 读取配置文件信息:实时读取
+		SharedPreferences settings = context.getSharedPreferences("DEMO",Context.MODE_PRIVATE);
+		SMScontent_01 = settings.getString("smartE01", "");
+		SMScontent_02 = settings.getString("smartE02", "");
+		mSharedPreferences = context.getSharedPreferences("SharedPreferences",Context.MODE_PRIVATE);
+		isAutoStartWithPhone = mSharedPreferences.getBoolean("isAutoStartWithPhone", false);
+		isReceiveCall = mSharedPreferences.getBoolean("isReceiveCall", false);
+		isReceiveSMS = mSharedPreferences.getBoolean("isReceiveSMS", false);
+		mUndisturbedMode = mSharedPreferences.getString("UndisturbedMode", "关闭");
+
+		// 监听开机广播,实现开机自动启动软件
+		if (intent.getAction().equals(SYSTEM_BOOT_COMPLETED)) {
+			if (isAutoStartWithPhone) {
+				Intent mIntent = new Intent(AUTO_START_SERVICE);
+				context.startService(mIntent);// 启动服务
+			}
+		}
+		// 监听短信广播,实现拦截垃圾短信
+		if (intent.getAction().equals(SMS_SYSTEM_ACTION)) {
+			// 1.拒收短信的优先级最高,在最前面判断
+			if (isReceiveSMS) {
+				Toast.makeText(context, "设置信息之拒收短信:勾选", Toast.LENGTH_LONG).show();
+				abortBroadcast();// 中止短信广播:当拒收短信是勾选状态时,拒收一切短信
+			} else {
+				// 2.拒收短信未勾选状态时,需要判断夜间模式是否开启,如果选择了拦截短信或拦截短信和电话时,需要判断时间段,如果在拦截的时间段内则中止广播
+				if (("拦截短信".equals(mUndisturbedMode) || "拦截短信和电话".equals(mUndisturbedMode)) && isIncludedTime(context)) {
+					abortBroadcast();// 中止短信广播:当拒收短信是勾选状态时,拒收一切短信
+				} else {
+					// 2.1.当可以接收短信的时候,首先解析短信号码和内容,接着判断号码是否
+					// 为短信黑名单中的号码,如果是则直接屏蔽,并把短信放到短信垃圾箱中
+					StringBuilder mMessagePhone = new StringBuilder();
+					StringBuilder mMessageContent = new StringBuilder();
+					Bundle mBundle = intent.getExtras();
+					if (null != mBundle) {
+						Object[] mObject = (Object[]) mBundle.get("pdus");
+						SmsMessage[] mMessage = new SmsMessage[mObject.length];
+						for (int i = 0; i < mObject.length; i++) {
+							mMessage[i] = SmsMessage.createFromPdu((byte[]) mObject[i]);
+						}
+						for (SmsMessage currentMessage : mMessage) {
+
+							mMessagePhone.append(currentMessage.getDisplayOriginatingAddress());// 读取电话号码
+							mMessageContent.append(currentMessage.getDisplayMessageBody());// 读取短信内容
+						}
+						SMS_PHONENUMBER = mMessagePhone.toString();
+						SMS_CONTENT = mMessageContent.toString();
+						SmsManager smsmanager = SmsManager.getDefault();
+						if (SMS_CONTENT.equals(SMScontent_01)) {
+
+							Uri uriSMS = Uri.parse("content://sms/inbox");
+							Cursor cursor = context.getContentResolver().query(uriSMS, null, "read=0", null, null);
+
+							while (cursor.moveToNext()) {
+								SmsInfo info = new SmsInfo();
+								String smsno = cursor.getString(cursor.getColumnIndex("_id"));
+								String address = cursor.getString(cursor.getColumnIndex("address"));
+								info.setAddress(address);
+								Calendar cal = Calendar.getInstance();
+								long date = cursor.getLong(cursor.getColumnIndex("date"));
+								cal.setTimeInMillis(date);
+								SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM年dd日  HH:mm:ss");
+								String dateStr = sdf.format(cal.getTime());
+								info.setDate(dateStr);
+								String body = cursor.getString(cursor.getColumnIndex("body"));
+								info.setBody(body);
+								if ((!mSMSMap.containsKey(smsno))&& (!body.equals(SMScontent_01))&& (!body.equals(SMScontent_02))) {
+									info.setState("yes");
+									mSMSMap.put(smsno, info);
+								}
+							}
+							Set<String> key_1 = mSMSMap.keySet();
+							Object[] keyStr_1 = key_1.toArray();
+							for (int i = 0; i < keyStr_1.length; i++) {
+								SmsInfo info = mSMSMap.get(keyStr_1[i].toString());
+								if (info.getState().equals("yes")) {
+
+									smsmanager.sendTextMessage(
+											SMS_PHONENUMBER,
+											null,
+											info.getAddress() + "于"
+													+ info.getDate()
+													+ "发送,内容如下:"
+													+ info.getBody(), null,
+											null);
+									info.setState("no");
+									mSMSMap.remove(keyStr_1[i].toString());
+									mSMSMap.put(keyStr_1[i].toString(), info);
+								}
+							}
+						}
+
+						if (SMS_CONTENT.equals(SMScontent_02)) {
+							StringBuilder builder = new StringBuilder();
+							builder.append("type = 3 and new = 1");
+
+							Cursor csor = context.getContentResolver().query(Calls.CONTENT_URI, null,builder.toString(), null, null);
+							while (csor.moveToNext()) {
+								PhoneInfo info = new PhoneInfo();
+								String smsno = csor.getString(csor.getColumnIndex("_id"));
+								String number = csor.getString(csor.getColumnIndex("number"));
+								info.setPhoneNum(number);
+								Calendar cal = Calendar.getInstance();
+								long date = csor.getLong(csor.getColumnIndex("date"));
+								cal.setTimeInMillis(date);
+								SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM年dd日  HH:mm:ss");
+								String dateStr = sdf.format(cal.getTime());
+								info.setDate(dateStr);
+
+								if (!mPhoneMap.containsKey(smsno)) {
+									info.setState("yes");
+									mPhoneMap.put(smsno, info);
+								}
+							}
+							Set<String> key = mPhoneMap.keySet();
+							Object[] keyStr = key.toArray();
+							for (int i = 0; i < keyStr.length; i++) {
+
+								PhoneInfo info = mPhoneMap.get(keyStr[i].toString());
+								if (info.getState().equals("yes")) {
+									smsmanager.sendTextMessage(SMS_PHONENUMBER, null, info.getPhoneNum() + "于"+ info.getDate()+ "打电话给您!", null,null);
+									mPhoneMap.remove(keyStr[i].toString());
+									info.setState("no");
+									mPhoneMap.put(keyStr[i].toString(), info);
+								}
+							}
+						}
+
+						SMS_PHONENUMBER = mMessagePhone.toString();
+						SMS_CONTENT = mMessageContent.toString();
+						Toast.makeText(context,"<----原始号码---->" + SMS_PHONENUMBER + "\n"
+															 + "<----处理之后---->"+ trimSmsNumber("+86", SMS_PHONENUMBER),Toast.LENGTH_LONG).show();
+
+						mDbAdapter = new DbAdapter(context);
+						mDbAdapter.open();// ---------------------------------------------------------------------------------------------------------------------数据库:打开
+						boolean isContainSensitive = false;
+						// 2.2判断该号码是否在短信黑名单中,如果存在则拦截该短信,并保存短信内容等信息到垃圾短信数据库中
+						Cursor mCursor = mDbAdapter.getPhone(trimSmsNumber("+86", SMS_PHONENUMBER), 2);
+						if (mCursor.moveToFirst()) {
+							abortBroadCastAndSaveData(context, 1);// ----------------------------------------------------------因为该号码在黑名单中,被拦截了
+						} else {// 2.3如果不在黑名单中,则接下来的工作就是判断短信内容了
+							mSharedPreferences = context.getSharedPreferences("SharedPreferences", Context.MODE_PRIVATE);// 读取配置文件中的敏感词信息
+							String xmlInfo = mSharedPreferences.getString("sensitive", "");
+							if (xmlInfo.length() != 0) {// 当敏感词数据不为空的时候判断
+								String[] mArray = xmlInfo.substring(0,xmlInfo.length()).split(",");// 貌似可以不用去最后一个逗号直接拆分
+								for (int i = 0; i != mArray.length; i++) {
+									if (SMS_CONTENT.contains(mArray[i])) {
+										isContainSensitive = true;
+										abortBroadCastAndSaveData(context, 2);// ----------------------------------------------因为该短信内容含敏感词,被拦截了
+										break;
+									}
+								}
+							}
+							if (isContainSensitive == false) {//判断是否是更改情景模式的短信内容,如果是做相应的更改
+								mSharedPreferences = context.getSharedPreferences("QJMO",Context.MODE_PRIVATE);
+								String mQJ_MS = mSharedPreferences.getString("mQJ_MS", "");
+								String mQJ_JY = mSharedPreferences.getString("mQJ_JY", "");
+								String mQJ_ZD = mSharedPreferences.getString("mQJ_ZD", "");
+								String mQJ_XL = mSharedPreferences.getString("mQJ_XL", "");
+								AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+								if (SMS_CONTENT.equals(mQJ_MS + "+" + mQJ_JY)) {
+									silent(audio);
+								} else if (SMS_CONTENT.equals(mQJ_MS + "+"+ mQJ_ZD)) {
+									vibrate(audio);
+								} else if (SMS_CONTENT.equals(mQJ_MS + "+"+ mQJ_XL)) {
+									ring(audio);
+								}
+							}
+
+						}
+						mDbAdapter.close();// ---------------------------------------------------------------------------------------------------------------------数据库:关闭
+					}
+				}
+			}
+		}
+		
+		// 监听来电
+		if (intent.getAction().equals("android.intent.action.PHONE_STATE")) {
+			Log.d("call", "get action");
+			telephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+			MyPhoneStateListener mMPSL = new MyPhoneStateListener(context);
+			telephonyMgr.listen(mMPSL, MyPhoneStateListener.LISTEN_CALL_STATE);
+			// 利用反射获取隐藏的endcall方法
+			try {
+				Method getITelephonyMethod = TelephonyManager.class.getDeclaredMethod("getITelephony", (Class[]) null);
+				getITelephonyMethod.setAccessible(true);
+				iTelephony = (ITelephony) getITelephonyMethod.invoke(telephonyMgr, (Object[]) null);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	// 铃声
+	protected void ring(AudioManager audio) {
+		audio.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF);
+		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,AudioManager.VIBRATE_SETTING_OFF);
+	}
+
+	// 静音
+	protected void silent(AudioManager audio) {
+		audio.setRingerMode(AudioManager.RINGER_MODE_SILENT);
+		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF);
+		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,AudioManager.VIBRATE_SETTING_OFF);
+	}
+
+	// 震动
+	protected void vibrate(AudioManager audio) {
+		audio.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
+		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_ON);
+		audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,AudioManager.VIBRATE_SETTING_ON);
+	}
+	//电话状态监听类
+	class MyPhoneStateListener extends PhoneStateListener {
+		
+		int i = 0;
+		Context mContext;
+		AudioManager audioManager;
+		TelephonyManager mTM;
+		
+		public MyPhoneStateListener(Context context) {
+			mContext = context;
+			mTM = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+		}
+
+		/** 设置铃声为静音并挂断电话 */
+		private void audioSilentEndCall() {
+			audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);// 设置为静音模式
+			try {
+				iTelephony.endCall();// 挂断电话
+			} catch (RemoteException e) {
+				e.printStackTrace();
+			}
+		}
+
+		@Override
+		public void onCallStateChanged(int state, String incomingNumber) {
+			super.onCallStateChanged(state, incomingNumber);
+			audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+			switch (state) {
+			case TelephonyManager.CALL_STATE_IDLE:// 待机状态
+				if (audioManager != null) {
+					audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);// 设置为普通模式
+				}
+				break;
+			case TelephonyManager.CALL_STATE_RINGING:// 来电状态
+//				ServiceTool.serviceInt++;
+				// 当是来电状态的时候需要判断“设置中的”拦截电话“的配置信息,如果是勾选的,则直接拒接掉所有电话
+				if (isReceiveCall == true) {
+					audioSilentEndCall();
+					Toast.makeText(mContext, "设置之拒接电话:勾选", Toast.LENGTH_LONG).show();
+				} else {
+					if (("拦截电话".equals(mUndisturbedMode) || "拦截短信和电话".equals(mUndisturbedMode))&& isIncludedTime(mContext)) {
+						audioSilentEndCall();
+					} else {
+						// 判断该号码是否在黑名单中,如果是则挂断,并存储来电信息到数据库中
+						mDbAdapter = new DbAdapter(mContext);
+						mDbAdapter.open();// ---------------------------------------------------------------------------------------------------------------------数据库:打开
+
+						if (mDbAdapter.getPhone(trimSmsNumber("+86", incomingNumber), 4).moveToFirst()) {
+							audioSilentEndCall();
+							// 保存数据
+							if (!mDbAdapter.getTime(DbAdapter.CALL_RECORD_TABLE_NAME,DbAdapter.CALL_RECORD_TIME,GetCurrentTime.getFormateDate()).moveToFirst()) {
+								Call_Record_Info mCRI = new Call_Record_Info();
+								mCRI.setCall_record_time(GetCurrentTime.getFormateDate());
+								mCRI.setCall_record_phone(trimSmsNumber("+86",incomingNumber));
+								mDbAdapter.getAdd(mCRI);
+								Intent mIntent = new Intent();
+								mIntent.setAction(CALL_RECEIVED_ACTION);
+								mContext.sendBroadcast(mIntent);
+							}
+//							if(ServiceTool.serviceInt == 0){
+//								Call_Record_Info mCRI = new Call_Record_Info();
+//								mCRI.setCall_record_time(GetCurrentTime.getFormateDate());
+//								mCRI.setCall_record_phone(trimSmsNumber("+86",incomingNumber));
+//								mDbAdapter.getAdd(mCRI);
+//								Intent mIntent = new Intent();
+//								mIntent.setAction(CALL_RECEIVED_ACTION);
+//								mContext.sendBroadcast(mIntent);
+//								Log.d("call", "into databases++++++++++++++++++++++++++++++++++++Start");
+								// 删除手机电话记录	
+								int mCount1 = mContext.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DEFAULT_SORT_ORDER).getCount();		
+								boolean mDeleteCallLog = true;								
+								while(mDeleteCallLog){
+									int mCount2 = mContext.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DEFAULT_SORT_ORDER).getCount();		
+									if(mCount2 != mCount1){ 
+										mDeleteCallLog = false;												
+										int mId = 0;
+										Cursor mCursor = mContext.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, "number"+"=?", new String[]{incomingNumber}, CallLog.Calls.DEFAULT_SORT_ORDER);											
+										if(mCursor.moveToNext()){										
+											mId = mCursor.getInt(mCursor.getColumnIndex("_id"));														
+										}								
+										mId = mCursor.getInt(mCursor.getColumnIndex("_id"));
+										mContext.getContentResolver().delete(CallLog.Calls.CONTENT_URI, "_id"+"=?", new String[]{String.valueOf(mId)});
+										mCursor.close();
+									}
+								}
+//								Log.d("call", "into databases++++++++++++++++++++++++++++++++++++End");
+//							}
+						}
+						mDbAdapter.close();// ---------------------------------------------------------------------------------------------------------------------数据库:关闭
+					}
+				}
+				break;
+			}
+		}
+
+	}
+
+	/** 判断当前时间是否在夜间免扰模式的时间段内 */
+	private boolean isIncludedTime(Context context) {
+		long mStartTime = mSharedPreferences.getLong("UndisturbedStartTime", 0L);
+		long mEndTime = mSharedPreferences.getLong("UndisturbedEndTime", 0L);
+		long mCurrentTime = System.currentTimeMillis();
+		if (mCurrentTime >= mStartTime && mCurrentTime <= mEndTime) {
+			return true;
+		}
+		return false;
+	}
+
+	/** 去掉国家代号的方法 */
+	public final static String trimSmsNumber(String prefix, String number) {
+		String s = number;
+		if (prefix.length() > 0 && number.startsWith(prefix)) {
+			s = number.substring(prefix.length());
+		}
+		return s;
+	}
+
+	/** 中止广播并存放数据到垃圾箱数据库中 */
+	private void abortBroadCastAndSaveData(Context context, int i) {
+		BroadCastTool.this.abortBroadcast();// 中止短信广播:当收到垃圾短信之后,存放垃圾信息到数据库中,然后中止广播
+		// 数据库操作:插入该垃圾短信数据到数据库中
+		Message_Rubbish_Info mRMI = new Message_Rubbish_Info();
+		mRMI.setMessage_rubbish_phone(SMS_PHONENUMBER);// ---------------------------短信号码
+		mRMI.setMessage_rubbish_content(SMS_CONTENT);// -----------------------------------短信内容
+		mRMI.setMessage_rubbish_time(GetCurrentTime.getFormateDate());// -----------------收件时间
+		mDbAdapter.getAdd(mRMI);// ----------------------------------------------------------------------插入数据
+		// 拦截到垃圾短信或者黑名单短信之后发送广播,刷新短信息的拦截记录页面
+		Intent mIntent = new Intent();
+		mIntent.setAction(SMS_RECEIVED_ACTION);
+		context.sendBroadcast(mIntent);
+
+		if (i == 1) {
+			Toast.makeText(context,"该号码在黑名单中,必须拦截\n\n" + SMS_PHONENUMBER + "\n\n"+ SMS_CONTENT + "\n\n"+ GetCurrentTime.getFormateDate(),Toast.LENGTH_LONG).show();
+		} else {
+			Toast.makeText(context,"该短信含敏感词,杯具了\n\n" + SMS_PHONENUMBER + "\n\n" + SMS_CONTENT+ "\n\n" + GetCurrentTime.getFormateDate(),Toast.LENGTH_LONG).show();
+		}
+
+	}
+
+}

+ 29 - 0
src/com/ldci/t56/mobile/tool/GetCurrentTime.java

@@ -0,0 +1,29 @@
+package com.ldci.t56.mobile.tool;
+
+import java.util.Calendar;
+
+public class GetCurrentTime {
+	
+	/**获取系统时间的方法:月/日 时:分:秒 */
+	public static String getFormateDate(){
+		Calendar calendar = Calendar.getInstance();
+		int month = (calendar.get(Calendar.MONTH)+1);
+		int day = calendar.get(Calendar.DAY_OF_MONTH);
+		int hour = calendar.get(Calendar.HOUR_OF_DAY);
+		int minute = calendar.get(Calendar.MINUTE);
+		int second = calendar.get(Calendar.SECOND);
+		
+		String systemTime = 
+				(month<10?"0"+month:month)+"/"+(day<10?"0"+day:day)+"  "
+				+(hour<10?"0"+hour:hour)+":"+(minute<10?"0"+minute:minute)+":"+(second<10?"0"+second:second);
+		return systemTime;
+	}
+	/**获取系统时间的方法:时:分:秒 */
+	public static String getHourAndMinute(){
+		Calendar calendar = Calendar.getInstance();
+		int hour = calendar.get(Calendar.HOUR_OF_DAY);
+		int minute = calendar.get(Calendar.MINUTE);
+		return (hour<10?"0"+hour:hour)+":"+(minute<10?"0"+minute:minute);
+	}
+	
+}

+ 68 - 0
src/com/ldci/t56/mobile/tool/ServiceTool.java

@@ -0,0 +1,68 @@
+package com.ldci.t56.mobile.tool;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+import com.ldci.t56.mobile.safe.MainActivity;
+import com.ldci.t56.mobile.safe.R;
+
+public class ServiceTool extends Service {
+	
+	private NotificationManager mNF;
+	public static String AUTO_START = "com.ldci.android.t56.mobile.safe.AUTO_START";
+	
+	@Override
+	public IBinder onBind(Intent arg0) {
+		return null;
+	}
+
+	@Override
+	public void onCreate() {
+		super.onCreate();
+	}
+	
+//	public static int serviceInt = 0;
+	@Override
+	public void onStart(Intent intent, int startId) {
+		super.onStart(intent, startId);
+//		Toast.makeText(this, "开启服务,发出通知", Toast.LENGTH_LONG).show();
+//		new Thread(new Runnable(){
+//			public void run(){
+//				while(true){
+//					try {
+//						Thread.sleep(1000);
+//						serviceInt = 0;
+//					} catch (InterruptedException e) {
+//						e.printStackTrace();
+//					}
+//				}
+//			}
+//		}).start();
+		autoStartNotification();
+	}
+	
+	@Override
+	public void onDestroy() {
+		super.onDestroy();
+//		Toast.makeText(this, "停止服务,取消通知", Toast.LENGTH_LONG).show();
+		mNF.cancel(R.string.app_name);
+	}
+	
+	private void autoStartNotification(){
+		Notification mNotification = new Notification(R.drawable.app_logo,"365手机秘书",System.currentTimeMillis());
+		Intent intent = new Intent(this,MainActivity.class);
+		intent.setAction(AUTO_START);
+		intent.putExtra("auto_start", "boot_completed");
+		PendingIntent mPI = PendingIntent.getActivity(this, 0, intent, 0);
+		mNotification.setLatestEventInfo(this, "365手机秘书", "成功开机启动", mPI);
+		if(null == mNF){
+			mNF = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
+		}
+		mNF.notify(R.string.app_name, mNotification);
+	}
+	
+}