- 浏览: 22090982 次
- 性别:
- 来自: 杭州
最新评论
-
ZY199266:
配置文件还需要额外的配置ma
Android 客户端通过内置API(HttpClient) 访问 服务器(用Spring MVC 架构) 返回的json数据全过程 -
ZY199266:
我的一访问为什么是 /mavenwebdemo/WEB-I ...
Android 客户端通过内置API(HttpClient) 访问 服务器(用Spring MVC 架构) 返回的json数据全过程 -
lvgaga:
我又一个问题就是 如果像你的这种形式写。配置文件还需要额外的 ...
Android 客户端通过内置API(HttpClient) 访问 服务器(用Spring MVC 架构) 返回的json数据全过程 -
lvgaga:
我的一访问为什么是 /mavenwebdemo/WEB-I ...
Android 客户端通过内置API(HttpClient) 访问 服务器(用Spring MVC 架构) 返回的json数据全过程 -
y1210251848:
你的那个错误应该是项目所使用的目标框架不支持吧
log4net配置(web中使用log4net,把web.config放在单独的文件中)
android 短信通知和SQLITE 应用,并在 listview中删除Item,或是清除整个listivew信息
本文出自:点击打开链接
最近有需求做个一手机开机后,监听手机短信(指定短信内容)通知客户。下面将实现代码写出来
短信通知广播拦截BootReceiver
- 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;
- 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;
- 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;
- 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"?>
- <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"?>
- <!--此布局文件用来定义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"?>
- <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>
相关推荐
在Android开发中,ListView是一个非常常用的组件,常用于展示大量数据列表。本教程将指导你如何从SQLite数据库中获取数据并将其动态显示到ListView上。SQLite是一个轻量级的嵌入式数据库,适用于移动设备,它能高效...
在Android开发中,SQLite是一个非常重要的本地数据存储机制,它是一个轻量级的数据库,能够帮助开发者在应用程序中实现数据的持久化。SQLite支持多种数据类型,如整型、浮点型、字符串和二进制数据,使得它可以适应...
- **自定义视图**:为了使ListView中的每一项具有独特的视觉效果,开发者通常会创建一个布局文件作为ListView的item模板,并在适配器中设置。 - **数据绑定**:适配器的getView()方法会为ListView的每一项加载数据...
本教程将详述如何在Android应用中读取SQLite数据库的数据并利用ListView进行展示。 首先,我们需要创建SQLite数据库。在Android中,我们通常通过扩展SQLiteOpenHelper类来实现,这个类帮助我们管理数据库的创建和...
Android Stdio开发的一个应用,运用Sqlite数据库和listview实现在前端进行对Sqlite的增删改查,数据库中的数据显示在Listview上,在Editetext上输入关键字会查询带有关键字的数据,点击Listview的每一行都可以对该行...
SQLite是Android内置的关系型数据库管理系统,它允许开发者在应用程序中创建、读取、更新和删除数据。SQLite数据库的特点包括: 1. **轻量级**:SQLite不需要单独的服务器进程,而是嵌入到应用程序中,占用资源少。...
在Android开发中,ListView、SQLite和BaseAdapter是三个至关重要的组件,它们共同协作,使得应用程序能够展示和管理大量数据。ListView是一种可滚动的视图,用于显示一系列项,而SQLite是一个轻量级的数据库系统,...
在Android开发中,SQLite是一个非常重要的本地数据存储方式。它是一个轻量级的数据库,能够有效地管理和处理应用程序中的数据。本教程将围绕“查询SQLite数据并分页显示在ListView”这一主题展开,帮助初学者理解...
在Android平台上,构建一个通讯录应用是一个常见的实践项目,它能帮助我们理解如何结合SQLite数据库和ListView组件来处理用户数据。在这个案例中,我们将深入探讨如何实现通讯录的增删查改功能。 首先,我们需要...
在Android开发中,SQLite数据库是常用的轻量级数据库,用于存储应用中的结构化数据。当用户界面如ListView显示这些数据时,通常会提供一个功能,让用户可以删除不再需要的条目。本文将介绍一种简单的实现方式,即...
在Android开发中,SQLite是一种常用的轻量级数据库,用于存储应用程序的数据。本案例将详细介绍如何将SQLite数据库中的数据展示到ListView上,这是一个基础且实用的功能,对于任何需要显示大量结构化数据的应用都至...
在Android平台上,构建一个商品展示系统是一个常见的应用场景,它涉及到数据存储、用户界面以及交互设计等多个方面的技术。在这个案例中,我们使用了Eclipse作为集成开发环境(IDE),SDK(Software Development Kit...
在Android开发中,SQLite通常用于持久化应用数据,如用户信息、设置、游戏进度等。 在"Sqlite实例"中,我们主要会涉及到以下几个知识点: 1. 数据库操作:首先,我们需要创建一个SQLiteOpenHelper的子类,重写...
在Android开发中,SQLite是一个内置的轻量级数据库系统,用于存储应用程序的数据。SQLite支持标准的关系型数据库特性,如SQL语法、事务处理等,且它无需独立服务器进程,可以直接嵌入到应用程序中。ListView则是...
在Android应用中,SQLite数据库常被用来持久化数据,存储结构化的信息。当需要将SQLite数据库中的数据展示在ListView上时,通常会涉及以下几个关键知识点: 1. **SQLite数据库操作**: - **创建数据库**:使用...
在Android开发领域,掌握基本的ListView和SQLite数据库操作是至关重要的技能。这个"Android项目源码带bug记事本"提供了很好的学习资源,让你能在实践中理解这两个关键知识点。以下是关于ListView和SQLite在Android中...
本篇主要探讨如何动态地添加和移除ListView中的item,以实现一个流畅的用户体验。 一、ListView的基本使用 1. XML布局:在布局文件中创建ListView,并为其指定id,例如`android:id="@+id/list_view"`。 2. 数据源:...
Android管理信息系统: 包括SQLite 数据库的增删改查,ListView的刷新,弹出对话框提示操作 ListView列表的优化 [注:本内容来自网络,在此分享仅为帮助有需要的网友,如果侵犯了您的权利,麻烦联系我,我会第一时间...
本文将从 Android 手机 App 程序开发的角度,对 SQLite 数据库在 Android手机 App 程序中的应用进行深入分析和讨论,并介绍了 SQLite 数据库在 Android 手机 App 程序中的实际应用案例。 1. Android 手机 App 程序...