`

android 短信通知和SQLITE 应用,并在 listview中删除Item,或是清除整个listivew信息

 
阅读更多

本文出自:点击打开链接

最近有需求做个一手机开机后,监听手机短信(指定短信内容)通知客户。下面将实现代码写出来

短信通知广播拦截BootReceiver

Java代码 收藏代码
  1. packagecom.msi.manning;
  2. importjava.util.ArrayList;
  3. importandroid.app.NotificationManager;
  4. importandroid.content.BroadcastReceiver;
  5. importandroid.content.Context;
  6. importandroid.content.Intent;
  7. importandroid.os.Bundle;
  8. importandroid.telephony.gsm.SmsMessage;
  9. importandroid.util.Log;
  10. /**
  11. *2011-4-18下午01:43:17BootReceiver.javaauthor:zhouhui
  12. *E-mail:wwwzhouhui@163.com
  13. */
  14. publicclassBootReceiverextendsBroadcastReceiver{
  15. staticfinalStringACTION="android.provider.Telephony.SMS_RECEIVED";
  16. privatestaticfinalStringLOG_TAG="SMSReceiver";
  17. publicstaticfinalintNOTIFICATION_ID_RECEIVED=0x1221;
  18. @Override
  19. publicvoidonReceive(Contextcontext,Intentintent){
  20. NotificationManagernm=(NotificationManager)context
  21. .getSystemService(Context.NOTIFICATION_SERVICE);
  22. ArrayList<String>list=newArrayList<String>();
  23. if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
  24. //Intentin=newIntent(context,SMSNotifyActivity.class);//
  25. //这是你的activity
  26. //in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  27. //context.startActivity(in);
  28. }
  29. if(intent.getAction().equals(BootReceiver.ACTION)){
  30. Bundlebundle=intent.getExtras();
  31. StringBuildersb=newStringBuilder();
  32. if(bundle!=null){
  33. Objectmessages[]=(Object[])bundle.get("pdus");
  34. SmsMessage[]smsMessage=newSmsMessage[messages.length];
  35. for(intn=0;n<messages.length;n++){
  36. smsMessage[n]=SmsMessage
  37. .createFromPdu((byte[])messages[n]);
  38. sb.append("From:");
  39. sb.append(smsMessage[n].getDisplayOriginatingAddress());
  40. sb.append("\n");
  41. sb.append(smsMessage[n].getDisplayMessageBody());
  42. list.add(sb.toString());
  43. }
  44. }
  45. Log.i(BootReceiver.LOG_TAG,"[SMSApp]onReceiveIntent0:"+sb);
  46. abortBroadcast();
  47. Intentin=newIntent(context,SMSNotifyActivity.class);
  48. Bundlebundle2=newBundle();
  49. bundle2.putStringArrayList("message",list);
  50. in.putExtras(bundle2);
  51. in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  52. context.startActivity(in);
  53. Log.i(BootReceiver.LOG_TAG,"[SMSApp]onReceiveIntent0over:");
  54. }
  55. }
  56. }

手机发送短信广播后会给android.provider.Telephony.SMS_RECEIVED 拦截 取得短信内容后面通知需要显示拦截展现的Activity

显示短信拦截内容的SMSNotifyActivity

package com.msi.manning;

Java代码 收藏代码
  1. importjava.util.ArrayList;
  2. importjava.util.HashMap;
  3. importandroid.app.Activity;
  4. importandroid.database.Cursor;
  5. importandroid.os.Bundle;
  6. importandroid.util.Log;
  7. importandroid.view.View;
  8. importandroid.view.View.OnClickListener;
  9. importandroid.widget.Button;
  10. importandroid.widget.ListView;
  11. publicclassSMSNotifyActivityextendsActivity{
  12. privatestaticfinalStringLOG_TAG="SMSReceiver";
  13. ButtoncloseBtn;
  14. ButtonclearBtn;
  15. ButtondeleteBtn;
  16. ListViewlist;
  17. ListViewButtonAdapterlistItemAdapter;
  18. privateDiaryDbAdaptermDbHelper;
  19. privateCursormDiaryCursor;
  20. publicvoidonCreate(Bundleicicle){
  21. super.onCreate(icicle);
  22. setContentView(R.layout.main);
  23. initLayout();
  24. }
  25. /**
  26. *查詢最新全部短信通知數據
  27. */
  28. privatevoidrenderListView(){
  29. mDiaryCursor=mDbHelper.getAllMessage();
  30. ArrayList<HashMap<String,Object>>listItem=newArrayList<HashMap<String,Object>>();
  31. mDiaryCursor.moveToFirst();
  32. while(!mDiaryCursor.isAfterLast()){
  33. HashMap<String,Object>map=newHashMap<String,Object>();
  34. Stringstatus=mDiaryCursor.getString(5);
  35. if(status.equals("0")){
  36. status="未查看";
  37. }else{
  38. status="已查看";
  39. }
  40. map.put("ItemTitle",mDiaryCursor.getLong(0));
  41. map.put("ItemType",mDiaryCursor.getString(3));
  42. map.put("ItemTime",mDiaryCursor.getString(4));
  43. map.put("ItemStatus",status);
  44. map.put("ItemText",mDiaryCursor.getString(1));
  45. listItem.add(map);
  46. mDiaryCursor.moveToNext();
  47. }
  48. mDiaryCursor.close();
  49. //生成适配器的Item和动态数组对应的元素
  50. listItemAdapter=newListViewButtonAdapter(this,listItem,//数据源
  51. R.layout.list,//ListItem的XML实现
  52. //动态数组与ImageItem对应的子项
  53. newString[]{"ItemTitle","ItemType","ItemTime",
  54. "ItemStatus","ItemText","ItemTitle","ItemTitle"},
  55. //ImageItem的XML文件里面的一个ImageView,两个TextViewID
  56. newint[]{R.id.ItemTitle,R.id.ItemType,R.id.ItemTime,
  57. R.id.ItemStatus,R.id.ItemText,R.id.btn_config_delete,
  58. R.id.btn_config_view},mDbHelper);
  59. //添加并且显示
  60. list.setAdapter(listItemAdapter);
  61. }
  62. /**
  63. *初始化組件
  64. */
  65. privatevoidinitLayout(){
  66. //绑定Layout里面的ListView
  67. list=(ListView)findViewById(R.id.MyListView);
  68. this.closeBtn=(Button)findViewById(R.id.btn_config_close);
  69. this.clearBtn=(Button)findViewById(R.id.btn_config_clear);
  70. closeBtn.setOnClickListener(newcloseBtn_Click());
  71. clearBtn.setOnClickListener(newclearBtn_Click());
  72. }
  73. @Override
  74. protectedvoidonStart(){
  75. super.onStart();
  76. mDbHelper=newDiaryDbAdapter(this);
  77. mDbHelper.open();
  78. Bundleextras=getIntent().getExtras();
  79. ArrayList<String>data=null;
  80. if(extras!=null){
  81. data=extras.getStringArrayList("message");
  82. for(intj=0;j<data.size();j++){
  83. String[]array=data.get(j).split("\n");
  84. String[]message=array[1].split("#");
  85. mDbHelper.createDiary(message[4],message[1],message[2],"0",
  86. message[3]);
  87. }
  88. }
  89. Log.i(SMSNotifyActivity.LOG_TAG,"[SMSApp]onReceiveIntent1:"+data);
  90. renderListView();
  91. }
  92. /**
  93. *關閉短信通知
  94. *
  95. *@authordell
  96. *
  97. */
  98. publicclasscloseBtn_ClickimplementsOnClickListener{
  99. publicvoidonClick(Viewarg0){
  100. SMSNotifyActivity.this.finish();
  101. }
  102. }
  103. /**
  104. *清除所有短信通知
  105. *
  106. *@authordell
  107. *
  108. */
  109. publicclassclearBtn_ClickimplementsOnClickListener{
  110. publicvoidonClick(Viewarg0){
  111. booleanflag=mDbHelper.deleteAll();
  112. Log.i(SMSNotifyActivity.LOG_TAG,"[SMSApp]clearBtn_Click:"+flag);
  113. listItemAdapter.notifyDataSetChanged();
  114. //刷新頁面
  115. renderListView();
  116. }
  117. }
  118. protectedvoidonRestart(){
  119. super.onRestart();
  120. Log.e(LOG_TAG,"startonRestart~~~");
  121. }
  122. @Override
  123. protectedvoidonResume(){
  124. super.onResume();
  125. Log.e(LOG_TAG,"startonResume~~~");
  126. }
  127. @Override
  128. protectedvoidonPause(){
  129. super.onPause();
  130. Log.e(LOG_TAG,"startonPause~~~");
  131. }
  132. @Override
  133. protectedvoidonStop(){
  134. super.onStop();
  135. Log.e(LOG_TAG,"startonStop~~~");
  136. }
  137. @Override
  138. protectedvoidonDestroy(){
  139. super.onDestroy();
  140. Log.e(LOG_TAG,"startonDestroy~~~");
  141. }
  142. }

短信拦截后的记录插入到数据库中,这里有个SQLlite辅助类DiaryDbAdapter

package com.msi.manning;

Java代码 收藏代码
  1. importjava.util.Calendar;
  2. importandroid.content.ContentValues;
  3. importandroid.content.Context;
  4. importandroid.database.Cursor;
  5. importandroid.database.SQLException;
  6. importandroid.database.sqlite.SQLiteDatabase;
  7. importandroid.database.sqlite.SQLiteOpenHelper;
  8. importandroid.util.Log;
  9. publicclassDiaryDbAdapter{
  10. privatestaticfinalStringPUSH_ID="push_id";//邮件等类型的主键
  11. privatestaticfinalStringCONTENT="content";//邮件等类型的简略内容
  12. privatestaticfinalStringSMS_FUNC_CODE="sms_func_code";//通知类型代码
  13. privatestaticfinalStringSMS_FUNC_CODE_CN="sms_func_code_cn";//通知类型中文名
  14. privatestaticfinalStringCREATE_TIME="create_time";//该记录创建的时间
  15. privatestaticfinalStringSTATUS="status";//通知状态
  16. privatestaticfinalStringREQID="reqid";//通知状态
  17. privatestaticfinalStringDATABASE_NAME="dbForMessage";
  18. privatestaticfinalStringDATABASE_TABLE="iuc_push_record";
  19. privatestaticfinalintDATABASE_VERSION=1;
  20. privatestaticfinalStringTAG="DiaryDbAdapter";
  21. privateDatabaseHelpermDbHelper;
  22. privateSQLiteDatabasemDb;
  23. privatestaticfinalStringDATABASE_CREATE="CREATETABLE"+DATABASE_TABLE+"("+PUSH_ID
  24. +"INTEGERPRIMARYKEYautoincrement,"+CONTENT+"textnotnull,"+SMS_FUNC_CODE+"text,"+SMS_FUNC_CODE_CN+"text,"+CREATE_TIME+"text,"+STATUS+"text,"+REQID+"text"+");";
  25. //privatestaticfinalStringDATABASE_CREATE="createtablediary(_idintegerprimarykeyautoincrement,"
  26. //+"titletextnotnull,bodytextnotnull,createdtextnotnull);";
  27. privatefinalContextmCtx;
  28. privatestaticclassDatabaseHelperextendsSQLiteOpenHelper{
  29. DatabaseHelper(Contextcontext){
  30. super(context,DATABASE_NAME,null,DATABASE_VERSION);
  31. }
  32. @Override
  33. publicvoidonCreate(SQLiteDatabasedb){
  34. Log.i(TAG,"[SMSApp]createDatabase:"+DATABASE_CREATE);
  35. db.execSQL(DATABASE_CREATE);
  36. }
  37. @Override
  38. publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
  39. Log.i(TAG,"[SMSApp]updatgeDatabase:"+DATABASE_CREATE);
  40. db.execSQL("DROPTABLEIFEXISTS"+DATABASE_TABLE);
  41. onCreate(db);
  42. }
  43. }
  44. publicDiaryDbAdapter(Contextctx){
  45. this.mCtx=ctx;
  46. }
  47. publicDiaryDbAdapteropen()throwsSQLException{
  48. mDbHelper=newDatabaseHelper(mCtx);
  49. mDb=mDbHelper.getWritableDatabase();
  50. returnthis;
  51. }
  52. publicvoidcloseclose(){
  53. mDbHelper.close();
  54. }
  55. publiclongcreateDiary(Stringcontent,Stringsms_func_code,Stringsms_func_code_cn,Stringstatus,Stringreqid){
  56. ContentValuesinitialValues=newContentValues();
  57. initialValues.put(CONTENT,content);
  58. initialValues.put(SMS_FUNC_CODE,sms_func_code);
  59. initialValues.put(SMS_FUNC_CODE_CN,sms_func_code_cn);
  60. initialValues.put(STATUS,status);
  61. initialValues.put(REQID,reqid);
  62. Calendarcalendar=Calendar.getInstance();
  63. Stringcreated=calendar.get(Calendar.YEAR)+"年"
  64. +calendar.get(Calendar.MONTH)+"月"
  65. +calendar.get(Calendar.DAY_OF_MONTH)+"日"
  66. +calendar.get(Calendar.HOUR_OF_DAY)+"时"
  67. +calendar.get(Calendar.MINUTE)+"分";
  68. initialValues.put(CREATE_TIME,created);
  69. Log.i(TAG,"[SMSApp]insertsql:");
  70. returnmDb.insert(DATABASE_TABLE,null,initialValues);
  71. }
  72. publicbooleandeleteDiary(longrowId){
  73. Log.i(TAG,"[SMSApp]deletesql:"+rowId);
  74. returnmDb.delete(DATABASE_TABLE,PUSH_ID+"="+rowId,null)>0;
  75. }
  76. publicbooleandeleteAll(){
  77. Log.i(TAG,"[SMSApp]deleteallsql:");
  78. returnmDb.delete(DATABASE_TABLE,null,null)>0;
  79. }
  80. publicCursorgetAllMessage(){
  81. Log.i(TAG,"[SMSApp]getallsql:");
  82. returnmDb.query(DATABASE_TABLE,newString[]{PUSH_ID,CONTENT,
  83. SMS_FUNC_CODE,SMS_FUNC_CODE_CN,CREATE_TIME,STATUS,REQID},null,null,null,null,null);
  84. }
  85. publicCursorgetDiary(longrowId)throwsSQLException{
  86. CursormCursor=
  87. mDb.query(true,DATABASE_TABLE,newString[]{PUSH_ID,CONTENT,
  88. SMS_FUNC_CODE,SMS_FUNC_CODE_CN,CREATE_TIME,STATUS,REQID},PUSH_ID+"="+rowId,null,null,
  89. null,null,null);
  90. Log.i(TAG,"[SMSApp]getDiarysql:");
  91. if(mCursor!=null){
  92. mCursor.moveToFirst();
  93. }
  94. returnmCursor;
  95. }
  96. publicbooleanupdateDiary(longrowId,Stringcontent,Stringsms_func_code,Stringsms_func_code_cn,Stringstatus,Stringreqid){
  97. ContentValuesargs=newContentValues();
  98. args.put(CONTENT,content);
  99. args.put(SMS_FUNC_CODE,sms_func_code);
  100. args.put(SMS_FUNC_CODE_CN,sms_func_code_cn);
  101. args.put(STATUS,status);
  102. args.put(REQID,reqid);
  103. Calendarcalendar=Calendar.getInstance();
  104. Stringcreated=calendar.get(Calendar.YEAR)+"年"
  105. +calendar.get(Calendar.MONTH)+"月"
  106. +calendar.get(Calendar.DAY_OF_MONTH)+"日"
  107. +calendar.get(Calendar.HOUR_OF_DAY)+"时"
  108. +calendar.get(Calendar.MINUTE)+"分";
  109. args.put(CREATE_TIME,created);
  110. Log.i(TAG,"[SMSApp]updatesql:");
  111. returnmDb.update(DATABASE_TABLE,args,PUSH_ID+"="+rowId,null)>0;
  112. }
  113. }

由于SMSNotifyActivity 方法中listview中有按钮提交事件普通的listview不能响应事件,ListViewButtonAdapter

扩展BaseAdapter 方法重写getView 方法,添加BUTTON 并添加按钮响应事件

package com.msi.manning;

Java代码 收藏代码
  1. importjava.util.ArrayList;
  2. importjava.util.HashMap;
  3. importandroid.content.Context;
  4. importandroid.content.Intent;
  5. importandroid.database.Cursor;
  6. importandroid.util.Log;
  7. importandroid.view.LayoutInflater;
  8. importandroid.view.View;
  9. importandroid.view.View.OnClickListener;
  10. importandroid.view.ViewGroup;
  11. importandroid.widget.BaseAdapter;
  12. importandroid.widget.Button;
  13. importandroid.widget.TextView;
  14. /**
  15. *2011-4-20上午10:56:21lvButtonAdapter.javaauthor:zhouhui
  16. *E-mail:wwwzhouhui@163.com
  17. */
  18. publicclassListViewButtonAdapterextendsBaseAdapter{
  19. privateDiaryDbAdaptermDbHelper;
  20. privatestaticfinalStringTAG="lvButtonAdapter";
  21. publicstaticfinalStringACTION_INTENT_TASKRECEIVER="com.gift.android.TaskReceiver";
  22. privateclassbuttonViewHolder{
  23. //ImageViewappIcon;
  24. TextViewappName1;
  25. TextViewappName2;
  26. TextViewappName3;
  27. TextViewappName4;
  28. TextViewappName5;
  29. ButtonbuttonClose;
  30. ButtonbuttonView;
  31. }
  32. privateArrayList<HashMap<String,Object>>mAppList;
  33. privateLayoutInflatermInflater;
  34. privateContextmContext;
  35. privateString[]keyString;
  36. privateint[]valueViewID;
  37. privatebuttonViewHolderholder;
  38. publicListViewButtonAdapter(Contextc,
  39. ArrayList<HashMap<String,Object>>appList,intresource,
  40. String[]from,int[]to,DiaryDbAdaptermDbHelper){
  41. mAppList=appList;
  42. mContext=c;
  43. mInflater=(LayoutInflater)mContext
  44. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  45. keyString=newString[from.length];
  46. valueViewID=newint[to.length];
  47. System.arraycopy(from,0,keyString,0,from.length);
  48. System.arraycopy(to,0,valueViewID,0,to.length);
  49. this.mDbHelper=mDbHelper;
  50. }
  51. @Override
  52. publicintgetCount(){
  53. returnmAppList.size();
  54. }
  55. @Override
  56. publicObjectgetItem(intposition){
  57. returnmAppList.get(position);
  58. }
  59. @Override
  60. publiclonggetItemId(intposition){
  61. returnposition;
  62. }
  63. publicvoidremoveItem(intposition){
  64. mAppList.remove(position);
  65. this.notifyDataSetChanged();
  66. }
  67. @Override
  68. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  69. if(convertView!=null){
  70. holder=(buttonViewHolder)convertView.getTag();
  71. }else{
  72. convertView=mInflater.inflate(R.layout.list,null);
  73. holder=newbuttonViewHolder();
  74. holder.appName1=(TextView)convertView
  75. .findViewById(valueViewID[0]);
  76. holder.appName2=(TextView)convertView
  77. .findViewById(valueViewID[1]);
  78. holder.appName3=(TextView)convertView
  79. .findViewById(valueViewID[2]);
  80. holder.appName4=(TextView)convertView
  81. .findViewById(valueViewID[3]);
  82. holder.appName5=(TextView)convertView
  83. .findViewById(valueViewID[4]);
  84. holder.buttonClose=(Button)convertView
  85. .findViewById(valueViewID[5]);
  86. holder.buttonView=(Button)convertView
  87. .findViewById(valueViewID[6]);
  88. convertView.setTag(holder);
  89. }
  90. HashMap<String,Object>appInfo=mAppList.get(position);
  91. if(appInfo!=null){
  92. Longaname1=(Long)appInfo.get(keyString[0]);
  93. Stringaname2=(String)appInfo.get(keyString[1]);
  94. Stringaname3=(String)appInfo.get(keyString[2]);
  95. Stringaname4=(String)appInfo.get(keyString[3]);
  96. Stringaname5=(String)appInfo.get(keyString[4]);
  97. holder.appName1.setText(String.valueOf(aname1));
  98. holder.appName2.setText(aname2);
  99. holder.appName3.setText(aname3);
  100. holder.appName4.setText(aname4);
  101. holder.appName5.setText(aname5);
  102. holder.buttonClose
  103. .setOnClickListener(newlvButtonListener(position));
  104. holder.buttonView
  105. .setOnClickListener(newlvButtonListener(position));
  106. }
  107. returnconvertView;
  108. }
  109. classlvButtonListenerimplementsOnClickListener{
  110. privateintposition;
  111. lvButtonListener(intpos){
  112. position=pos;
  113. }
  114. @Override
  115. publicvoidonClick(Viewv){
  116. intvid=v.getId();
  117. if(vid==holder.buttonClose.getId()){
  118. booleanflag=mDbHelper.deleteDiary(Long
  119. .parseLong((holder.appName1.getText().toString())));
  120. Log.i(TAG,"[SMSApp]deletesql:"+flag);
  121. removeItem(position);
  122. }
  123. if(vid==holder.buttonView.getId()){
  124. //查看短信详细
  125. ShowView(Long.parseLong((holder.appName1.getText().toString())));
  126. }
  127. }
  128. privatevoidShowView(longid){
  129. CursormDiaryCursor=mDbHelper.getDiary(id);
  130. if(mDiaryCursor!=null){
  131. booleanflag=mDbHelper.updateDiary(id,
  132. mDiaryCursor.getString(1),mDiaryCursor.getString(2),
  133. mDiaryCursor.getString(3),"1",mDiaryCursor.getString(6));
  134. Log.i(TAG,"[SMSApp]updatesql:"+flag);
  135. //广播消息
  136. Intentintent=newIntent(ACTION_INTENT_TASKRECEIVER);
  137. intent.putExtra("TaskContent",mDiaryCursor.getString(2)+"#"+mDiaryCursor.getString(6));
  138. mContext.sendBroadcast(intent);
  139. }
  140. }
  141. }
  142. }

layout 文件的布局管理文件

main.xml

<?xml version="1.0" encoding="utf-8"?>

Xml代码 收藏代码
  1. <RelativeLayoutandroid:id="@+id/RelativeLayout01"
  2. android:layout_width="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_height="wrap_content"android:paddingBottom="4dip"
  4. android:paddingLeft="12dip"android:paddingRight="12dip"
  5. android:descendantFocusability="blocksDescendants">
  6. <ListViewandroid:layout_width="wrap_content"
  7. android:layout_height="400dip"
  8. android:id="@+id/MyListView">
  9. </ListView>
  10. <LinearLayout
  11. android:id="@+id/bottom_panel"
  12. android:layout_width="fill_parent"
  13. android:layout_height="wrap_content"
  14. android:orientation="horizontal"
  15. android:gravity="center_horizontal"
  16. android:layout_alignParentBottom="true"
  17. >
  18. <Buttonandroid:id="@+id/btn_config_clear"
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:width="100dip"
  22. android:text="清空"/>
  23. <Buttonandroid:id="@+id/btn_config_close"
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:width="100dip"
  27. android:text="退出"/>
  28. </LinearLayout>
  29. </RelativeLayout>

list.xml

<?xml version="1.0" encoding="utf-8"?>

Xml代码 收藏代码
  1. <!--此布局文件用来定义listview的显示方式-->
  2. <RelativeLayoutandroid:id="@+id/RelativeLayout01"
  3. android:layout_width="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_height="wrap_content"android:paddingBottom="4dip"
  5. android:paddingLeft="12dip"android:paddingRight="12dip"
  6. android:descendantFocusability="blocksDescendants">
  7. <TextViewandroid:layout_height="wrap_content"
  8. android:textSize="20dip"android:layout_width="fill_parent"
  9. android:id="@+id/ItemTitle"/>
  10. <TextViewandroid:layout_height="wrap_content"
  11. android:layout_width="fill_parent"android:layout_below="@+id/ItemTitle"
  12. android:id="@+id/ItemType"/>
  13. <TextViewandroid:layout_height="wrap_content"android:layout_below="@+id/ItemType"
  14. android:layout_width="fill_parent"
  15. android:id="@+id/ItemTime"/>
  16. <TextViewandroid:layout_height="wrap_content"
  17. android:layout_width="fill_parent"android:layout_below="@+id/ItemTime"
  18. android:id="@+id/ItemStatus"/>
  19. <TextViewandroid:layout_height="wrap_content"
  20. android:layout_width="fill_parent"android:layout_below="@+id/ItemStatus"
  21. android:id="@+id/ItemText"/>
  22. <Buttonandroid:id="@+id/btn_config_view"
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:layout_below="@+id/ItemText"
  26. android:layout_alignParentRight="true"
  27. android:focusable="false"
  28. android:width="50dip"
  29. android:text="查看"/>
  30. <Buttonandroid:id="@+id/btn_config_delete"
  31. android:layout_width="wrap_content"
  32. android:layout_height="wrap_content"
  33. android:layout_toLeftOf="@+id/btn_config_view"
  34. android:layout_alignTop="@+id/btn_config_view"
  35. android:focusable="false"
  36. android:width="50dip"
  37. android:text="删除"/>
  38. </RelativeLayout>

AndroidManifest.xml

中 添加手机自启动注册信息android.permission.RECEIVE_BOOT_COMPLETED

添加广播监听

<receiver android:name=".BootReceiver">

<intent-filter android:priority="100">

<action android:name="android.intent.action.BOOT_COMPLETED" />

<action android:name="android.provider.Telephony.SMS_RECEIVED" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</receiver>

这里添加短信监听广播接收android.provider.Telephony.SMS_RECEIVED

完整的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

Xml代码 收藏代码
  1. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  2. package="com.msi.manning">
  3. <applicationandroid:icon="@drawable/chat">
  4. <activityandroid:name="com.msi.manning.SMSNotifyActivity"
  5. android:label="@string/app_name"android:clearTaskOnLaunch="true">
  6. <intent-filter>
  7. <actionandroid:name="android.intent.action.MAIN"/>
  8. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  9. </intent-filter>
  10. </activity>
  11. <receiverandroid:name=".BootReceiver">
  12. <intent-filterandroid:priority="100">
  13. <actionandroid:name="android.intent.action.BOOT_COMPLETED"/>
  14. <actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>
  15. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  16. </intent-filter>
  17. </receiver>
  18. </application>
  19. <uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  20. <uses-permissionandroid:name="android.permission.RECEIVE_SMS"></uses-permission><!--程序接收短信权限-->
  21. <uses-permissionandroid:name="android.permission.READ_SMS"></uses-permission><!--读短信权限-->
  22. </manifest>



分享到:
评论

相关推荐

    Android Studio如何获取SQLite数据并显示到ListView上

    在Android开发中,ListView是一个非常常用的组件,常用于展示大量数据列表。本教程将指导你如何从SQLite数据库中获取数据并将其动态显示到ListView上。SQLite是一个轻量级的嵌入式数据库,适用于移动设备,它能高效...

    android SQlite、listView中加按钮的使用

    在Android开发中,SQLite是一个非常重要的本地数据存储机制,它是一个轻量级的数据库,能够帮助开发者在应用程序中实现数据的持久化。SQLite支持多种数据类型,如整型、浮点型、字符串和二进制数据,使得它可以适应...

    Android SQLite ListView Demo

    - **自定义视图**:为了使ListView中的每一项具有独特的视觉效果,开发者通常会创建一个布局文件作为ListView的item模板,并在适配器中设置。 - **数据绑定**:适配器的getView()方法会为ListView的每一项加载数据...

    android读取sqlite数据库的数据并用listview显示

    本教程将详述如何在Android应用中读取SQLite数据库的数据并利用ListView进行展示。 首先,我们需要创建SQLite数据库。在Android中,我们通常通过扩展SQLiteOpenHelper类来实现,这个类帮助我们管理数据库的创建和...

    Android中Sqlite数据库跟Listview对数据进行增删改查(附带登录注册功能)

    Android Stdio开发的一个应用,运用Sqlite数据库和listview实现在前端进行对Sqlite的增删改查,数据库中的数据显示在Listview上,在Editetext上输入关键字会查询带有关键字的数据,点击Listview的每一行都可以对该行...

    Android基础 SQLite和ListView

    SQLite是Android内置的关系型数据库管理系统,它允许开发者在应用程序中创建、读取、更新和删除数据。SQLite数据库的特点包括: 1. **轻量级**:SQLite不需要单独的服务器进程,而是嵌入到应用程序中,占用资源少。...

    Android中ListView,SQLite,BaseAdapter的结合源码

    在Android开发中,ListView、SQLite和BaseAdapter是三个至关重要的组件,它们共同协作,使得应用程序能够展示和管理大量数据。ListView是一种可滚动的视图,用于显示一系列项,而SQLite是一个轻量级的数据库系统,...

    查询Sqlite分页显示在ListView里

    在Android开发中,SQLite是一个非常重要的本地数据存储方式。它是一个轻量级的数据库,能够有效地管理和处理应用程序中的数据。本教程将围绕“查询SQLite数据并分页显示在ListView”这一主题展开,帮助初学者理解...

    Android案例:通讯录。利用SQLite+ListView,实现通讯录增删查改

    在Android平台上,构建一个通讯录应用是一个常见的实践项目,它能帮助我们理解如何结合SQLite数据库和ListView组件来处理用户数据。在这个案例中,我们将深入探讨如何实现通讯录的增删查改功能。 首先,我们需要...

    Android通过点击对应listview条目的删除按钮实现删除sqlite数据库对应行信息的简单方法

    在Android开发中,SQLite数据库是常用的轻量级数据库,用于存储应用中的结构化数据。当用户界面如ListView显示这些数据时,通常会提供一个功能,让用户可以删除不再需要的条目。本文将介绍一种简单的实现方式,即...

    将SQLite数据展示到listview小案例

    在Android开发中,SQLite是一种常用的轻量级数据库,用于存储应用程序的数据。本案例将详细介绍如何将SQLite数据库中的数据展示到ListView上,这是一个基础且实用的功能,对于任何需要显示大量结构化数据的应用都至...

    Android案例:商品展示系统。利用SQLite+ListView,实现商品增删查改

    在Android平台上,构建一个商品展示系统是一个常见的应用场景,它涉及到数据存储、用户界面以及交互设计等多个方面的技术。在这个案例中,我们使用了Eclipse作为集成开发环境(IDE),SDK(Software Development Kit...

    Sqlite实例及ListView

    在Android开发中,SQLite通常用于持久化应用数据,如用户信息、设置、游戏进度等。 在"Sqlite实例"中,我们主要会涉及到以下几个知识点: 1. 数据库操作:首先,我们需要创建一个SQLiteOpenHelper的子类,重写...

    android SQLite+ListView 的简单使用

    在Android开发中,SQLite是一个内置的轻量级数据库系统,用于存储应用程序的数据。SQLite支持标准的关系型数据库特性,如SQL语法、事务处理等,且它无需独立服务器进程,可以直接嵌入到应用程序中。ListView则是...

    ListVIew存储和表现sqlite数据

    在Android应用中,SQLite数据库常被用来持久化数据,存储结构化的信息。当需要将SQLite数据库中的数据展示在ListView上时,通常会涉及以下几个关键知识点: 1. **SQLite数据库操作**: - **创建数据库**:使用...

    Android项目源码带bug记事本可以学习基本的listview和SQLite知识

    在Android开发领域,掌握基本的ListView和SQLite数据库操作是至关重要的技能。这个"Android项目源码带bug记事本"提供了很好的学习资源,让你能在实践中理解这两个关键知识点。以下是关于ListView和SQLite在Android中...

    ListView动态添加、移除item

    本篇主要探讨如何动态地添加和移除ListView中的item,以实现一个流畅的用户体验。 一、ListView的基本使用 1. XML布局:在布局文件中创建ListView,并为其指定id,例如`android:id="@+id/list_view"`。 2. 数据源:...

    Android管理信息系统: 包括SQLite 数据库的增删改查,ListView的刷新,弹出对话框提示操作 ListView列表的优化

    Android管理信息系统: 包括SQLite 数据库的增删改查,ListView的刷新,弹出对话框提示操作 ListView列表的优化 [注:本内容来自网络,在此分享仅为帮助有需要的网友,如果侵犯了您的权利,麻烦联系我,我会第一时间...

    Android手机App程序中SQLite数据存储应用.pdf

    本文将从 Android 手机 App 程序开发的角度,对 SQLite 数据库在 Android手机 App 程序中的应用进行深入分析和讨论,并介绍了 SQLite 数据库在 Android 手机 App 程序中的实际应用案例。 1. Android 手机 App 程序...

Global site tag (gtag.js) - Google Analytics