设为首页 收藏本站
查看: 2237|回复: 0

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

[复制链接]

尚未签到

发表于 2016-12-2 06:39:20 | 显示全部楼层 |阅读模式
  本文出自:点击打开链接

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


  • 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[messages.length];

  • for(intn=0;n<messages.length;n++){
  • smsMessage[n]=SmsMessage
  • .createFromPdu((byte[])messages[n]);
  • sb.append("From:");
  • sb.append(smsMessage[n].getDisplayOriginatingAddress());
  • sb.append("\n");
  • sb.append(smsMessage[n].getDisplayMessageBody());
  • list.add(sb.toString());
  • }
  • }
  • Log.i(BootReceiver.LOG_TAG,"[SMSApp]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,"[SMSApp]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[1].split("#");
  • mDbHelper.createDiary(message[4],message[1],message[2],"0",
  • message[3]);
  • }
  • }
  • Log.i(SMSNotifyActivity.LOG_TAG,"[SMSApp]onReceiveIntent1:"+data);
  • renderListView();
  • }

  • /**
  • *關閉短信通知
  • *
  • *@authordell
  • *
  • */
  • publicclasscloseBtn_ClickimplementsOnClickListener{
  • publicvoidonClick(Viewarg0){
  • SMSNotifyActivity.this.finish();
  • }
  • }

  • /**
  • *清除所有短信通知
  • *
  • *@authordell
  • *
  • */
  • publicclassclearBtn_ClickimplementsOnClickListener{
  • publicvoidonClick(Viewarg0){
  • booleanflag=mDbHelper.deleteAll();
  • Log.i(SMSNotifyActivity.LOG_TAG,"[SMSApp]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,"[SMSApp]createDatabase:"+DATABASE_CREATE);
  • db.execSQL(DATABASE_CREATE);
  • }

  • @Override
  • publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
  • Log.i(TAG,"[SMSApp]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,"[SMSApp]insertsql:");
  • returnmDb.insert(DATABASE_TABLE,null,initialValues);
  • }

  • publicbooleandeleteDiary(longrowId){
  • Log.i(TAG,"[SMSApp]deletesql:"+rowId);
  • returnmDb.delete(DATABASE_TABLE,PUSH_ID+"="+rowId,null)>0;
  • }

  • publicbooleandeleteAll(){
  • Log.i(TAG,"[SMSApp]deleteallsql:");
  • returnmDb.delete(DATABASE_TABLE,null,null)>0;

  • }

  • publicCursorgetAllMessage(){
  • Log.i(TAG,"[SMSApp]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,"[SMSApp]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,"[SMSApp]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[from.length];
  • valueViewID=newint[to.length];
  • 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[0]);
  • holder.appName2=(TextView)convertView
  • .findViewById(valueViewID[1]);
  • holder.appName3=(TextView)convertView
  • .findViewById(valueViewID[2]);
  • holder.appName4=(TextView)convertView
  • .findViewById(valueViewID[3]);
  • holder.appName5=(TextView)convertView
  • .findViewById(valueViewID[4]);
  • holder.buttonClose=(Button)convertView
  • .findViewById(valueViewID[5]);
  • holder.buttonView=(Button)convertView
  • .findViewById(valueViewID[6]);
  • convertView.setTag(holder);
  • }

  • HashMap<String,Object>appInfo=mAppList.get(position);
  • if(appInfo!=null){
  • Longaname1=(Long)appInfo.get(keyString[0]);
  • Stringaname2=(String)appInfo.get(keyString[1]);
  • Stringaname3=(String)appInfo.get(keyString[2]);
  • Stringaname4=(String)appInfo.get(keyString[3]);
  • Stringaname5=(String)appInfo.get(keyString[4]);
  • 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,"[SMSApp]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,"[SMSApp]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>

  
DSC0001.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-308279-1-1.html 上篇帖子: Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数) 下篇帖子: SQL学习笔记之数据库专题(三):Android下Sqlite数据库ORM框架之GreenDao详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表