android 短信通知和SQLITE 应用,并在 listview中删除Item,或是清除整个listivew信息
本文出自:点击打开链接最近有需求做个一手机开机后,监听手机短信(指定短信内容)通知客户。下面将实现代码写出来
短信通知广播拦截BootReceiver
Java代码
[*]packagecom.msi.manning;
[*]
[*]importjava.util.ArrayList;
[*]
[*]importandroid.app.NotificationManager;
[*]importandroid.content.BroadcastReceiver;
[*]importandroid.content.Context;
[*]importandroid.content.Intent;
[*]importandroid.os.Bundle;
[*]importandroid.telephony.gsm.SmsMessage;
[*]importandroid.util.Log;
[*]
[*]/**
[*]*2011-4-18下午01:43:17BootReceiver.javaauthor:zhouhui
[*]*E-mail:wwwzhouhui@163.com
[*]*/
[*]publicclassBootReceiverextendsBroadcastReceiver{
[*]staticfinalStringACTION="android.provider.Telephony.SMS_RECEIVED";
[*]privatestaticfinalStringLOG_TAG="SMSReceiver";
[*]publicstaticfinalintNOTIFICATION_ID_RECEIVED=0x1221;
[*]
[*]@Override
[*]publicvoidonReceive(Contextcontext,Intentintent){
[*]NotificationManagernm=(NotificationManager)context
[*].getSystemService(Context.NOTIFICATION_SERVICE);
[*]ArrayList<String>list=newArrayList<String>();
[*]if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
[*]//Intentin=newIntent(context,SMSNotifyActivity.class);//
[*]//这是你的activity
[*]//in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
[*]//context.startActivity(in);
[*]}
[*]if(intent.getAction().equals(BootReceiver.ACTION)){
[*]Bundlebundle=intent.getExtras();
[*]StringBuildersb=newStringBuilder();
[*]if(bundle!=null){
[*]Objectmessages[]=(Object[])bundle.get("pdus");
[*]SmsMessage[]smsMessage=newSmsMessage;
[*]
[*]for(intn=0;n<messages.length;n++){
[*]smsMessage=SmsMessage
[*].createFromPdu((byte[])messages);
[*]sb.append("From:");
[*]sb.append(smsMessage.getDisplayOriginatingAddress());
[*]sb.append("\n");
[*]sb.append(smsMessage.getDisplayMessageBody());
[*]list.add(sb.toString());
[*]}
[*]}
[*]Log.i(BootReceiver.LOG_TAG,"onReceiveIntent0:"+sb);
[*]abortBroadcast();
[*]
[*]Intentin=newIntent(context,SMSNotifyActivity.class);
[*]Bundlebundle2=newBundle();
[*]bundle2.putStringArrayList("message",list);
[*]in.putExtras(bundle2);
[*]in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
[*]context.startActivity(in);
[*]Log.i(BootReceiver.LOG_TAG,"onReceiveIntent0over:");
[*]}
[*]}
[*]
[*]}
手机发送短信广播后会给android.provider.Telephony.SMS_RECEIVED 拦截 取得短信内容后面通知需要显示拦截展现的Activity
显示短信拦截内容的SMSNotifyActivity
package com.msi.manning;
Java代码
[*]importjava.util.ArrayList;
[*]importjava.util.HashMap;
[*]
[*]importandroid.app.Activity;
[*]importandroid.database.Cursor;
[*]importandroid.os.Bundle;
[*]importandroid.util.Log;
[*]importandroid.view.View;
[*]importandroid.view.View.OnClickListener;
[*]importandroid.widget.Button;
[*]importandroid.widget.ListView;
[*]
[*]publicclassSMSNotifyActivityextendsActivity{
[*]privatestaticfinalStringLOG_TAG="SMSReceiver";
[*]ButtoncloseBtn;
[*]ButtonclearBtn;
[*]ButtondeleteBtn;
[*]ListViewlist;
[*]ListViewButtonAdapterlistItemAdapter;
[*]privateDiaryDbAdaptermDbHelper;
[*]privateCursormDiaryCursor;
[*]
[*]publicvoidonCreate(Bundleicicle){
[*]super.onCreate(icicle);
[*]setContentView(R.layout.main);
[*]initLayout();
[*]}
[*]
[*]/**
[*]*查詢最新全部短信通知數據
[*]*/
[*]privatevoidrenderListView(){
[*]mDiaryCursor=mDbHelper.getAllMessage();
[*]ArrayList<HashMap<String,Object>>listItem=newArrayList<HashMap<String,Object>>();
[*]mDiaryCursor.moveToFirst();
[*]while(!mDiaryCursor.isAfterLast()){
[*]HashMap<String,Object>map=newHashMap<String,Object>();
[*]Stringstatus=mDiaryCursor.getString(5);
[*]if(status.equals("0")){
[*]status="未查看";
[*]}else{
[*]status="已查看";
[*]}
[*]map.put("ItemTitle",mDiaryCursor.getLong(0));
[*]map.put("ItemType",mDiaryCursor.getString(3));
[*]map.put("ItemTime",mDiaryCursor.getString(4));
[*]map.put("ItemStatus",status);
[*]map.put("ItemText",mDiaryCursor.getString(1));
[*]listItem.add(map);
[*]mDiaryCursor.moveToNext();
[*]}
[*]mDiaryCursor.close();
[*]//生成适配器的Item和动态数组对应的元素
[*]listItemAdapter=newListViewButtonAdapter(this,listItem,//数据源
[*]R.layout.list,//ListItem的XML实现
[*]//动态数组与ImageItem对应的子项
[*]newString[]{"ItemTitle","ItemType","ItemTime",
[*]"ItemStatus","ItemText","ItemTitle","ItemTitle"},
[*]//ImageItem的XML文件里面的一个ImageView,两个TextViewID
[*]newint[]{R.id.ItemTitle,R.id.ItemType,R.id.ItemTime,
[*]R.id.ItemStatus,R.id.ItemText,R.id.btn_config_delete,
[*]R.id.btn_config_view},mDbHelper);
[*]//添加并且显示
[*]list.setAdapter(listItemAdapter);
[*]}
[*]
[*]/**
[*]*初始化組件
[*]*/
[*]privatevoidinitLayout(){
[*]//绑定Layout里面的ListView
[*]list=(ListView)findViewById(R.id.MyListView);
[*]this.closeBtn=(Button)findViewById(R.id.btn_config_close);
[*]this.clearBtn=(Button)findViewById(R.id.btn_config_clear);
[*]closeBtn.setOnClickListener(newcloseBtn_Click());
[*]clearBtn.setOnClickListener(newclearBtn_Click());
[*]}
[*]
[*]@Override
[*]protectedvoidonStart(){
[*]super.onStart();
[*]mDbHelper=newDiaryDbAdapter(this);
[*]mDbHelper.open();
[*]Bundleextras=getIntent().getExtras();
[*]ArrayList<String>data=null;
[*]if(extras!=null){
[*]data=extras.getStringArrayList("message");
[*]for(intj=0;j<data.size();j++){
[*]String[]array=data.get(j).split("\n");
[*]String[]message=array.split("#");
[*]mDbHelper.createDiary(message,message,message,"0",
[*]message);
[*]}
[*]}
[*]Log.i(SMSNotifyActivity.LOG_TAG,"onReceiveIntent1:"+data);
[*]renderListView();
[*]}
[*]
[*]/**
[*]*關閉短信通知
[*]*
[*]*@authordell
[*]*
[*]*/
[*]publicclasscloseBtn_ClickimplementsOnClickListener{
[*]publicvoidonClick(Viewarg0){
[*]SMSNotifyActivity.this.finish();
[*]}
[*]}
[*]
[*]/**
[*]*清除所有短信通知
[*]*
[*]*@authordell
[*]*
[*]*/
[*]publicclassclearBtn_ClickimplementsOnClickListener{
[*]publicvoidonClick(Viewarg0){
[*]booleanflag=mDbHelper.deleteAll();
[*]Log.i(SMSNotifyActivity.LOG_TAG,"clearBtn_Click:"+flag);
[*]listItemAdapter.notifyDataSetChanged();
[*]//刷新頁面
[*]renderListView();
[*]}
[*]}
[*]
[*]protectedvoidonRestart(){
[*]super.onRestart();
[*]Log.e(LOG_TAG,"startonRestart~~~");
[*]}
[*]
[*]@Override
[*]protectedvoidonResume(){
[*]super.onResume();
[*]Log.e(LOG_TAG,"startonResume~~~");
[*]}
[*]
[*]@Override
[*]protectedvoidonPause(){
[*]super.onPause();
[*]Log.e(LOG_TAG,"startonPause~~~");
[*]}
[*]
[*]@Override
[*]protectedvoidonStop(){
[*]super.onStop();
[*]Log.e(LOG_TAG,"startonStop~~~");
[*]}
[*]
[*]@Override
[*]protectedvoidonDestroy(){
[*]super.onDestroy();
[*]Log.e(LOG_TAG,"startonDestroy~~~");
[*]}
[*]}
短信拦截后的记录插入到数据库中,这里有个SQLlite辅助类DiaryDbAdapter
package com.msi.manning;
Java代码
[*]importjava.util.Calendar;
[*]
[*]importandroid.content.ContentValues;
[*]importandroid.content.Context;
[*]importandroid.database.Cursor;
[*]importandroid.database.SQLException;
[*]importandroid.database.sqlite.SQLiteDatabase;
[*]importandroid.database.sqlite.SQLiteOpenHelper;
[*]importandroid.util.Log;
[*]
[*]publicclassDiaryDbAdapter{
[*]
[*]privatestaticfinalStringPUSH_ID="push_id";//邮件等类型的主键
[*]privatestaticfinalStringCONTENT="content";//邮件等类型的简略内容
[*]privatestaticfinalStringSMS_FUNC_CODE="sms_func_code";//通知类型代码
[*]privatestaticfinalStringSMS_FUNC_CODE_CN="sms_func_code_cn";//通知类型中文名
[*]privatestaticfinalStringCREATE_TIME="create_time";//该记录创建的时间
[*]privatestaticfinalStringSTATUS="status";//通知状态
[*]privatestaticfinalStringREQID="reqid";//通知状态
[*]privatestaticfinalStringDATABASE_NAME="dbForMessage";
[*]privatestaticfinalStringDATABASE_TABLE="iuc_push_record";
[*]privatestaticfinalintDATABASE_VERSION=1;
[*]
[*]privatestaticfinalStringTAG="DiaryDbAdapter";
[*]privateDatabaseHelpermDbHelper;
[*]privateSQLiteDatabasemDb;
[*]
[*]privatestaticfinalStringDATABASE_CREATE="CREATETABLE"+DATABASE_TABLE+"("+PUSH_ID
[*]+"INTEGERPRIMARYKEYautoincrement,"+CONTENT+"textnotnull,"+SMS_FUNC_CODE+"text,"+SMS_FUNC_CODE_CN+"text,"+CREATE_TIME+"text,"+STATUS+"text,"+REQID+"text"+");";
[*]//privatestaticfinalStringDATABASE_CREATE="createtablediary(_idintegerprimarykeyautoincrement,"
[*]//+"titletextnotnull,bodytextnotnull,createdtextnotnull);";
[*]
[*]privatefinalContextmCtx;
[*]
[*]privatestaticclassDatabaseHelperextendsSQLiteOpenHelper{
[*]
[*]DatabaseHelper(Contextcontext){
[*]super(context,DATABASE_NAME,null,DATABASE_VERSION);
[*]}
[*]
[*]@Override
[*]publicvoidonCreate(SQLiteDatabasedb){
[*]Log.i(TAG,"createDatabase:"+DATABASE_CREATE);
[*]db.execSQL(DATABASE_CREATE);
[*]}
[*]
[*]@Override
[*]publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
[*]Log.i(TAG,"updatgeDatabase:"+DATABASE_CREATE);
[*]db.execSQL("DROPTABLEIFEXISTS"+DATABASE_TABLE);
[*]onCreate(db);
[*]}
[*]}
[*]
[*]publicDiaryDbAdapter(Contextctx){
[*]this.mCtx=ctx;
[*]}
[*]
[*]publicDiaryDbAdapteropen()throwsSQLException{
[*]mDbHelper=newDatabaseHelper(mCtx);
[*]mDb=mDbHelper.getWritableDatabase();
[*]returnthis;
[*]}
[*]
[*]publicvoidcloseclose(){
[*]mDbHelper.close();
[*]}
[*]
[*]publiclongcreateDiary(Stringcontent,Stringsms_func_code,Stringsms_func_code_cn,Stringstatus,Stringreqid){
[*]ContentValuesinitialValues=newContentValues();
[*]initialValues.put(CONTENT,content);
[*]initialValues.put(SMS_FUNC_CODE,sms_func_code);
[*]initialValues.put(SMS_FUNC_CODE_CN,sms_func_code_cn);
[*]initialValues.put(STATUS,status);
[*]initialValues.put(REQID,reqid);
[*]Calendarcalendar=Calendar.getInstance();
[*]Stringcreated=calendar.get(Calendar.YEAR)+"年"
[*]+calendar.get(Calendar.MONTH)+"月"
[*]+calendar.get(Calendar.DAY_OF_MONTH)+"日"
[*]+calendar.get(Calendar.HOUR_OF_DAY)+"时"
[*]+calendar.get(Calendar.MINUTE)+"分";
[*]initialValues.put(CREATE_TIME,created);
[*]Log.i(TAG,"insertsql:");
[*]returnmDb.insert(DATABASE_TABLE,null,initialValues);
[*]}
[*]
[*]publicbooleandeleteDiary(longrowId){
[*]Log.i(TAG,"deletesql:"+rowId);
[*]returnmDb.delete(DATABASE_TABLE,PUSH_ID+"="+rowId,null)>0;
[*]}
[*]
[*]publicbooleandeleteAll(){
[*]Log.i(TAG,"deleteallsql:");
[*]returnmDb.delete(DATABASE_TABLE,null,null)>0;
[*]
[*]}
[*]
[*]publicCursorgetAllMessage(){
[*]Log.i(TAG,"getallsql:");
[*]returnmDb.query(DATABASE_TABLE,newString[]{PUSH_ID,CONTENT,
[*]SMS_FUNC_CODE,SMS_FUNC_CODE_CN,CREATE_TIME,STATUS,REQID},null,null,null,null,null);
[*]}
[*]
[*]publicCursorgetDiary(longrowId)throwsSQLException{
[*]
[*]CursormCursor=
[*]
[*]mDb.query(true,DATABASE_TABLE,newString[]{PUSH_ID,CONTENT,
[*]SMS_FUNC_CODE,SMS_FUNC_CODE_CN,CREATE_TIME,STATUS,REQID},PUSH_ID+"="+rowId,null,null,
[*]null,null,null);
[*]Log.i(TAG,"getDiarysql:");
[*]if(mCursor!=null){
[*]mCursor.moveToFirst();
[*]}
[*]returnmCursor;
[*]
[*]}
[*]
[*]publicbooleanupdateDiary(longrowId,Stringcontent,Stringsms_func_code,Stringsms_func_code_cn,Stringstatus,Stringreqid){
[*]ContentValuesargs=newContentValues();
[*]args.put(CONTENT,content);
[*]args.put(SMS_FUNC_CODE,sms_func_code);
[*]args.put(SMS_FUNC_CODE_CN,sms_func_code_cn);
[*]args.put(STATUS,status);
[*]args.put(REQID,reqid);
[*]Calendarcalendar=Calendar.getInstance();
[*]Stringcreated=calendar.get(Calendar.YEAR)+"年"
[*]+calendar.get(Calendar.MONTH)+"月"
[*]+calendar.get(Calendar.DAY_OF_MONTH)+"日"
[*]+calendar.get(Calendar.HOUR_OF_DAY)+"时"
[*]+calendar.get(Calendar.MINUTE)+"分";
[*]args.put(CREATE_TIME,created);
[*]Log.i(TAG,"updatesql:");
[*]returnmDb.update(DATABASE_TABLE,args,PUSH_ID+"="+rowId,null)>0;
[*]}
[*]}
由于SMSNotifyActivity 方法中listview中有按钮提交事件普通的listview不能响应事件,ListViewButtonAdapter
扩展BaseAdapter 方法重写getView 方法,添加BUTTON 并添加按钮响应事件
package com.msi.manning;
Java代码
[*]importjava.util.ArrayList;
[*]importjava.util.HashMap;
[*]
[*]importandroid.content.Context;
[*]importandroid.content.Intent;
[*]importandroid.database.Cursor;
[*]importandroid.util.Log;
[*]importandroid.view.LayoutInflater;
[*]importandroid.view.View;
[*]importandroid.view.View.OnClickListener;
[*]importandroid.view.ViewGroup;
[*]importandroid.widget.BaseAdapter;
[*]importandroid.widget.Button;
[*]importandroid.widget.TextView;
[*]
[*]/**
[*]*2011-4-20上午10:56:21lvButtonAdapter.javaauthor:zhouhui
[*]*E-mail:wwwzhouhui@163.com
[*]*/
[*]publicclassListViewButtonAdapterextendsBaseAdapter{
[*]privateDiaryDbAdaptermDbHelper;
[*]privatestaticfinalStringTAG="lvButtonAdapter";
[*]publicstaticfinalStringACTION_INTENT_TASKRECEIVER="com.gift.android.TaskReceiver";
[*]
[*]privateclassbuttonViewHolder{
[*]//ImageViewappIcon;
[*]TextViewappName1;
[*]TextViewappName2;
[*]TextViewappName3;
[*]TextViewappName4;
[*]TextViewappName5;
[*]ButtonbuttonClose;
[*]ButtonbuttonView;
[*]}
[*]
[*]privateArrayList<HashMap<String,Object>>mAppList;
[*]privateLayoutInflatermInflater;
[*]privateContextmContext;
[*]privateString[]keyString;
[*]privateint[]valueViewID;
[*]privatebuttonViewHolderholder;
[*]
[*]publicListViewButtonAdapter(Contextc,
[*]ArrayList<HashMap<String,Object>>appList,intresource,
[*]String[]from,int[]to,DiaryDbAdaptermDbHelper){
[*]mAppList=appList;
[*]mContext=c;
[*]mInflater=(LayoutInflater)mContext
[*].getSystemService(Context.LAYOUT_INFLATER_SERVICE);
[*]keyString=newString;
[*]valueViewID=newint;
[*]System.arraycopy(from,0,keyString,0,from.length);
[*]System.arraycopy(to,0,valueViewID,0,to.length);
[*]this.mDbHelper=mDbHelper;
[*]}
[*]
[*]@Override
[*]publicintgetCount(){
[*]returnmAppList.size();
[*]}
[*]
[*]@Override
[*]publicObjectgetItem(intposition){
[*]returnmAppList.get(position);
[*]}
[*]
[*]@Override
[*]publiclonggetItemId(intposition){
[*]returnposition;
[*]}
[*]
[*]publicvoidremoveItem(intposition){
[*]mAppList.remove(position);
[*]this.notifyDataSetChanged();
[*]}
[*]
[*]@Override
[*]publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
[*]if(convertView!=null){
[*]holder=(buttonViewHolder)convertView.getTag();
[*]}else{
[*]convertView=mInflater.inflate(R.layout.list,null);
[*]holder=newbuttonViewHolder();
[*]holder.appName1=(TextView)convertView
[*].findViewById(valueViewID);
[*]holder.appName2=(TextView)convertView
[*].findViewById(valueViewID);
[*]holder.appName3=(TextView)convertView
[*].findViewById(valueViewID);
[*]holder.appName4=(TextView)convertView
[*].findViewById(valueViewID);
[*]holder.appName5=(TextView)convertView
[*].findViewById(valueViewID);
[*]holder.buttonClose=(Button)convertView
[*].findViewById(valueViewID);
[*]holder.buttonView=(Button)convertView
[*].findViewById(valueViewID);
[*]convertView.setTag(holder);
[*]}
[*]
[*]HashMap<String,Object>appInfo=mAppList.get(position);
[*]if(appInfo!=null){
[*]Longaname1=(Long)appInfo.get(keyString);
[*]Stringaname2=(String)appInfo.get(keyString);
[*]Stringaname3=(String)appInfo.get(keyString);
[*]Stringaname4=(String)appInfo.get(keyString);
[*]Stringaname5=(String)appInfo.get(keyString);
[*]holder.appName1.setText(String.valueOf(aname1));
[*]holder.appName2.setText(aname2);
[*]holder.appName3.setText(aname3);
[*]holder.appName4.setText(aname4);
[*]holder.appName5.setText(aname5);
[*]holder.buttonClose
[*].setOnClickListener(newlvButtonListener(position));
[*]holder.buttonView
[*].setOnClickListener(newlvButtonListener(position));
[*]}
[*]returnconvertView;
[*]}
[*]
[*]classlvButtonListenerimplementsOnClickListener{
[*]privateintposition;
[*]
[*]lvButtonListener(intpos){
[*]position=pos;
[*]}
[*]
[*]@Override
[*]publicvoidonClick(Viewv){
[*]intvid=v.getId();
[*]if(vid==holder.buttonClose.getId()){
[*]booleanflag=mDbHelper.deleteDiary(Long
[*].parseLong((holder.appName1.getText().toString())));
[*]Log.i(TAG,"deletesql:"+flag);
[*]removeItem(position);
[*]}
[*]if(vid==holder.buttonView.getId()){
[*]//查看短信详细
[*]ShowView(Long.parseLong((holder.appName1.getText().toString())));
[*]}
[*]}
[*]
[*]privatevoidShowView(longid){
[*]CursormDiaryCursor=mDbHelper.getDiary(id);
[*]if(mDiaryCursor!=null){
[*]booleanflag=mDbHelper.updateDiary(id,
[*]mDiaryCursor.getString(1),mDiaryCursor.getString(2),
[*]mDiaryCursor.getString(3),"1",mDiaryCursor.getString(6));
[*]Log.i(TAG,"updatesql:"+flag);
[*]//广播消息
[*]Intentintent=newIntent(ACTION_INTENT_TASKRECEIVER);
[*]intent.putExtra("TaskContent",mDiaryCursor.getString(2)+"#"+mDiaryCursor.getString(6));
[*]mContext.sendBroadcast(intent);
[*]}
[*]}
[*]}
[*]
[*]}
layout 文件的布局管理文件
main.xml
<?xml version="1.0" encoding="utf-8"?>
Xml代码
[*]<RelativeLayoutandroid:id="@+id/RelativeLayout01"
[*]android:layout_width="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android"
[*]android:layout_height="wrap_content"android:paddingBottom="4dip"
[*]android:paddingLeft="12dip"android:paddingRight="12dip"
[*]android:descendantFocusability="blocksDescendants">
[*]<ListViewandroid:layout_width="wrap_content"
[*]android:layout_height="400dip"
[*]android:id="@+id/MyListView">
[*]</ListView>
[*]<LinearLayout
[*]android:id="@+id/bottom_panel"
[*]android:layout_width="fill_parent"
[*]android:layout_height="wrap_content"
[*]android:orientation="horizontal"
[*]android:gravity="center_horizontal"
[*]android:layout_alignParentBottom="true"
[*]>
[*]<Buttonandroid:id="@+id/btn_config_clear"
[*]android:layout_width="wrap_content"
[*]android:layout_height="wrap_content"
[*]android:width="100dip"
[*]android:text="清空"/>
[*]<Buttonandroid:id="@+id/btn_config_close"
[*]android:layout_width="wrap_content"
[*]android:layout_height="wrap_content"
[*]android:width="100dip"
[*]android:text="退出"/>
[*]</LinearLayout>
[*]</RelativeLayout>
list.xml
<?xml version="1.0" encoding="utf-8"?>
Xml代码
[*]<!--此布局文件用来定义listview的显示方式-->
[*]<RelativeLayoutandroid:id="@+id/RelativeLayout01"
[*]android:layout_width="fill_parent"xmlns:android="http://schemas.android.com/apk/res/android"
[*]android:layout_height="wrap_content"android:paddingBottom="4dip"
[*]android:paddingLeft="12dip"android:paddingRight="12dip"
[*]android:descendantFocusability="blocksDescendants">
[*]<TextViewandroid:layout_height="wrap_content"
[*]android:textSize="20dip"android:layout_width="fill_parent"
[*]android:id="@+id/ItemTitle"/>
[*]<TextViewandroid:layout_height="wrap_content"
[*]android:layout_width="fill_parent"android:layout_below="@+id/ItemTitle"
[*]android:id="@+id/ItemType"/>
[*]<TextViewandroid:layout_height="wrap_content"android:layout_below="@+id/ItemType"
[*]android:layout_width="fill_parent"
[*]android:id="@+id/ItemTime"/>
[*]<TextViewandroid:layout_height="wrap_content"
[*]android:layout_width="fill_parent"android:layout_below="@+id/ItemTime"
[*]android:id="@+id/ItemStatus"/>
[*]<TextViewandroid:layout_height="wrap_content"
[*]android:layout_width="fill_parent"android:layout_below="@+id/ItemStatus"
[*]android:id="@+id/ItemText"/>
[*]<Buttonandroid:id="@+id/btn_config_view"
[*]android:layout_width="wrap_content"
[*]android:layout_height="wrap_content"
[*]android:layout_below="@+id/ItemText"
[*]android:layout_alignParentRight="true"
[*]android:focusable="false"
[*]android:width="50dip"
[*]android:text="查看"/>
[*]<Buttonandroid:id="@+id/btn_config_delete"
[*]android:layout_width="wrap_content"
[*]android:layout_height="wrap_content"
[*]android:layout_toLeftOf="@+id/btn_config_view"
[*]android:layout_alignTop="@+id/btn_config_view"
[*]android:focusable="false"
[*]android:width="50dip"
[*]android:text="删除"/>
[*]</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代码
[*]<manifestxmlns:android="http://schemas.android.com/apk/res/android"
[*]package="com.msi.manning">
[*]<applicationandroid:icon="@drawable/chat">
[*]<activityandroid:name="com.msi.manning.SMSNotifyActivity"
[*]android:label="@string/app_name"android:clearTaskOnLaunch="true">
[*]<intent-filter>
[*]<actionandroid:name="android.intent.action.MAIN"/>
[*]<categoryandroid:name="android.intent.category.LAUNCHER"/>
[*]</intent-filter>
[*]</activity>
[*]<receiverandroid:name=".BootReceiver">
[*]<intent-filterandroid:priority="100">
[*]<actionandroid:name="android.intent.action.BOOT_COMPLETED"/>
[*]<actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>
[*]<categoryandroid:name="android.intent.category.LAUNCHER"/>
[*]</intent-filter>
[*]</receiver>
[*]</application>
[*]<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
[*]<uses-permissionandroid:name="android.permission.RECEIVE_SMS"></uses-permission><!--程序接收短信权限-->
[*]<uses-permissionandroid:name="android.permission.READ_SMS"></uses-permission><!--读短信权限-->
[*]</manifest>
页:
[1]