`
isiqi
  • 浏览: 16496027 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

android短信机制

阅读更多

android删除短信整个会话

[功能]

1. 收信箱:显示所有收到的信息 且实时显示 即:当有新信息收到 能自动刷新显示

2. 发信箱:显示所有已发信息 同上

3. 编写新信息: 鉴于一些问题 打算不自行定义 而只通过Intent调用系统的

[原理]

1. 通过目标Uri显示收信箱 发信箱 目标Uri:content://sms/inbox content://sms/sent

2. 实时刷新:一个办法是开辟thread 定时查询目标Uri 显示之 但会带来一些效能影响 所以决定使用ContentObserve监听目标Uri 当有变动 由ContentObserve通知注册方 该Uri:content://sms

3. 注意:ContentObserve不能监听: content://sms/inbox & content://sms/sent 而只能监听content://sms

[代码 步骤]

1. 定义SMSObserver 用于监听目标 并通过Handle通知注册方

Java 代码
  1. public class SMSObserver extends ContentObserver{
  2. public final static int SMS_CHANGE= 0 ;
  3. Handlerhandle;
  4. public SMSObserver(Handlerh){
  5. super (h);
  6. //TODOAuto-generatedconstructorstub
  7. handle=h;
  8. }
  9. public void onChange( boolean selfChange){
  10. //TODOAuto-generatedmethodstub
  11. super .onChange(selfChange);
  12. //notifySMSInbox&SMSSent
  13. handle.sendEmptyMessage(SMS_CHANGE);
  14. }
  15. }

2. 定义注册方:SMSInbox 鉴于SMSSent与其原理类似 故打算以SMSInbox为例

> 2.1. 显示当前所有收信箱 并与ListView适配

Java代码
  1. lv=(ListView)findViewById(R.id.list);
  2. cursor=getContentResolver().query(Uri.parse("content://sms/inbox" ), null , null , null , null );
  3. adapter=new ItemAdapter( this );
  4. lv.setAdapter(adapter);

> 2.2. 定义Handle 用于接受变动 并注册与ContentObserve 当接到通知后 查询目标Uri 并刷新显示

Java代码
  1. handler= new Handler(){
  2. public void handleMessage(Messagemsg){
  3. if (msg.what==SMSObserver.SMS_CHANGE){
  4. cursor=getContentResolver().query(Uri.parse("content://sms/inbox" ), null , null , null , null );
  5. adapter.notifyDataSetChanged();
  6. }
  7. }
  8. };
  9. sObserver=new SMSObserver(handler);
  10. this .getContentResolver().registerContentObserver(Uri.parse( "content://sms" ), true ,sObserver);

> 2.3. SMSInbox 仅用于显示 收信箱 故定义 SMSDetails extends Activity 用于详细显示 sms信息

- 2.3.1. 定义布局:details.xml

Java代码
  1. <?xmlversion= "1.0" encoding= "utf-8" ?>
  2. <LinearLayoutxmlns:Android ="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:id="@+id/detailsNumber"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. />
  12. <TextView
  13. android:id="@+id/detailsBody"
  14. android:layout_width="fill_parent"
  15. android:layout_height="200dip"
  16. />
  17. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  18. android:orientation="horizontal"
  19. android:layout_width="300dip"
  20. android:layout_height="wrap_content"
  21. >
  22. <Button
  23. android:id="@+id/detailsReply"
  24. android:layout_width="100dip"
  25. android:layout_height="wrap_content"
  26. android:layout_gravity="left"
  27. android:text="回复"
  28. />
  29. <Button
  30. android:id="@+id/detailsOK"
  31. android:layout_width="100dip"
  32. android:layout_height="wrap_content"
  33. android:layout_gravity="right"
  34. android:text="确定"
  35. />
  36. </LinearLayout>
  37. </LinearLayout>

- 2.3.2. 其中2个TextView 分别显示信息地址和正文 2个Button 一个用于关闭当前窗口 一个用于短信回复 且自动填充 收信人地址

Java代码
  1. public class SMSDetails extends Activity{
  2. TextViewtextNumber,textBody;
  3. ButtonbtnOK,btnReply;
  4. OnClickListenercl;
  5. Stringaddress,body;
  6. /**Calledwhentheactivityisfirstcreated.*/
  7. @Override
  8. public void onCreate(BundlesavedInstanceState){
  9. super .onCreate(savedInstanceState);
  10. setContentView(R.layout.details);
  11. textNumber=(TextView)findViewById(R.id.detailsNumber);
  12. textBody=(TextView)findViewById(R.id.detailsBody);
  13. btnReply=(Button)findViewById(R.id.detailsReply);
  14. btnOK=(Button)findViewById(R.id.detailsOK);
  15. Intenti=this .getIntent();
  16. Bundlebundle=i.getExtras();
  17. address=bundle.getString("address" );
  18. body=bundle.getString("body" );
  19. textNumber.setText("from:" +address);
  20. textBody.setText("messagebody:\n" +body);
  21. cl=new OnClickListener(){
  22. @Override
  23. public void onClick(Viewarg0){
  24. //TODOAuto-generatedmethodstub
  25. switch (arg0.getId()){
  26. case R.id.detailsReply:
  27. sendGoNativeNew(address);
  28. break ;
  29. case R.id.detailsOK:
  30. sendBack();
  31. break ;
  32. }
  33. }
  34. };
  35. btnReply.setOnClickListener(cl);
  36. btnOK.setOnClickListener(cl);
  37. }
  38. public void sendGoNativeNew(Stringaddress){
  39. //nativesendsmsapp
  40. IntentsendIntent=new Intent(Intent.ACTION_SENDTO,Uri.parse( "sms://" ));
  41. //autofill"address"
  42. sendIntent.putExtra("address" ,address);
  43. startActivity(sendIntent);
  44. }
  45. public void sendBack(){
  46. Intenti=new Intent();
  47. this .setResult(RESULT_OK,i);
  48. this .finish();
  49. }
  50. }

- 2.3.3. 点击SMSInbox 某项 跳转到SMSDetails

Java代码
  1. lv.setOnItemClickListener( new OnItemClickListener(){
  2. @Override
  3. public void onItemClick(AdapterView<?>arg0,Viewarg1, int arg2,
  4. long arg3){
  5. //TODOAuto-generatedmethodstub
  6. cursor.moveToPosition(arg2);
  7. Stringbody=cursor.getString(cursor.getColumnIndexOrThrow("body" )).toString();
  8. Stringaddress=cursor.getString(cursor.getColumnIndexOrThrow("address" )).toString();
  9. Bundleb=new Bundle();
  10. b.putString("body" ,body);
  11. b.putString("address" ,address);
  12. Intentintent=new Intent(SMSInbox. this ,SMSDetails. class );
  13. intent.putExtras(b);
  14. startActivity(intent);
  15. }
  16. });

- 2.3.4. 其中item.xml 用于定义子项布局

Xml代码
  1. <? xml version = "1.0" encoding = "utf-8" ?>
  2. < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
  3. android:orientation = "vertical"
  4. android:layout_width = "fill_parent"
  5. android:layout_height = "fill_parent"
  6. >
  7. < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
  8. android:orientation = "horizontal"
  9. android:layout_width = "wrap_content"
  10. android:layout_height = "wrap_content"
  11. >
  12. < ImageView
  13. android:id = "@+id/body"
  14. android:layout_width = "wrap_content"
  15. android:layout_height = "wrap_content"
  16. />
  17. < TextView
  18. android:id = "@+id/num"
  19. android:layout_width = "wrap_content"
  20. android:layout_height = col
    分享到:
    评论
    1 楼 yun471224023 2011-07-24  
    有用有用

相关推荐

    Android短信拦截机制的研究.pdf

    【Android短信拦截机制】 在Android系统中,短信作为重要的通信方式,承载了诸如银行验证码、登录验证、交易通知等敏感信息。然而,由于Android的开放性,恶意软件开发者可以利用系统漏洞来实施短信拦截,从而窃取...

    Android SMSNotify Android 短信通知源码

    【Android SMSNotify】是一款专为Android...通过对`SMSNotify`源码的学习和理解,开发者不仅可以掌握Android短信通知的实现方式,还能深入了解Android系统的组件交互、权限管理、数据存储以及性能优化等多方面知识。

    android 广播机制和短信截获

    总结来说,Android的广播机制为应用程序提供了强大的通讯能力,而短信广播截获则能让我们实时监控短信消息。通过理解广播的工作原理,合理选择注册方式,以及正确处理权限和系统限制,我们可以创建出高效且可靠的...

    Android 短信 UI 工程文件

    本文将深入探讨“Android短信UI工程文件”所涵盖的关键知识点,包括UI设计原则、布局管理器、控件使用以及Android的Intent机制。 首先,Android UI设计遵循Material Design指南,这是一种统一的视觉语言,旨在提供...

    Android代码-一个短信应用源码.zip

    【Android短信应用源码解析】 在Android开发中,构建一个短信应用涉及到许多核心技术和组件的使用。本项目源码提供了一个完整的短信应用实例,通过它我们可以深入理解Android平台上的消息处理、用户界面设计以及与...

    简易的android短信管理器代码

    以上就是实现一个简易的Android短信管理器涉及的主要技术点,涵盖了Android的权限管理、广播机制、SMSManager、UI设计以及数据库操作等多个方面。通过学习和实践这些知识点,开发者可以构建出功能完善的短信应用。

    android 短信中心号

    5. **错误处理**:考虑到并非所有手机都存储了SMSC号码,或者用户可能禁止应用访问短信,因此应该包含适当的错误处理机制。 在实际操作中,可能需要遍历短信表,查找特定类型的短信(例如,系统消息或运营商消息)...

    android 源码 短信收发工具

    在Android系统中,短信的收发是通过系统的SMS服务来实现的,这涉及到Android的底层通信框架和消息处理机制。本文将深入解析Android源码,探讨短信收发工具的实现,以及如何通过编程接口(API)来控制这个过程。 ...

    Android4.4+短信拦截删除

    然而,从Android 6.0(Marshmallow)开始,系统引入了运行时权限机制。即使在`AndroidManifest.xml`中声明了权限,应用程序还需要在运行时请求用户授予`READ_SMS`和`WRITE_SMS`权限。因此,在实际开发中,需要检查...

    android手机短信管理系统论文 完整版

    2.3 Android应用的构成和工作机制 8 第3章 android应用程序结构剖析 9 3.1 Android的API 9 3.2 Android应用程序结构解析 10 3.2.1 活动 10 3.2.2 意图接收器 11 3.2.3 服务 11 3.2.4 内容提供者 11 3.3 Intent的详细...

    android短信软件

    在Android系统中,短信服务是核心功能之...在开发过程中,可以参考SMSProject压缩包内的示例代码,它包含了完整的短信拦截和延迟发送功能的实现,通过学习和理解这些代码,你可以更好地掌握Android短信服务的开发技巧。

    Android_实战_短信收发

    在Android平台上,短信收发是一项基础且重要的功能。本文将深入探讨如何在Android应用中实现这一功能,特别关注Broadcast...通过实践,开发者可以更好地理解和掌握Android系统的广播机制,提升应用的交互性和功能性。

    Android启动短信界面

    在Android操作系统中,Intent是一种强大的机制,用于在不同的应用程序组件之间进行通信,或者启动系统服务。当我们想要在我们的应用中启动系统预置的短信界面时,Intent就派上了用场。这个过程涉及到对Android系统...

    Android管理手机短信

    首先,显示未读短信是Android短信应用的基础。这需要访问Android系统的SMS Provider,这是一个SQLite数据库,存储着手机上的所有短信。通过ContentResolver和Uri类,我们可以查询这个数据库,获取未读短信的内容、发...

    android手机短信源码

    首先,Android短信服务主要基于TelephonyManager、SmsManager和ContentProvider等组件。`TelephonyManager`是获取手机通话状态和信息的主要接口,包括获取SIM卡信息、网络状态等。`SmsManager`则负责短信的发送和...

    Android 短信SMS发送代码流程

    本文将详细介绍 Android 短信SMS发送代码流程的实现机制。 Messaging 应用层 在 Android 中,短信发送功能是通过 Messaging 应用层来实现的。Messaging 应用层负责处理短信的发送和接收操作。在这个层次中,有两个...

    android 简单的短信发送

    以下是关于Android短信发送的详细知识讲解: 一、SMSManager类 在Android中,发送短信主要依赖于`SMSManager`类,它是Android SDK提供的用于处理SMS(Short Message Service)的API。要使用这个类,首先需要在代码...

    Android短信发送功能实现技巧分享

    在Android平台上,实现短信...以上就是关于Android短信发送功能的一些基本实现和技巧。在实际开发中,可以根据项目需求进行适当的调整和优化,例如添加错误处理机制,实现批量发送,或结合网络接口进行更复杂的操作。

    Android发短信小程序

    以上就是关于"Android发短信小程序"的核心知识点,包括Activity生命周期、Intent机制、权限管理和版本兼容性处理。在实际开发中,还需要注意UI设计、异常处理、用户体验等方面,确保应用的稳定性和易用性。通过学习...

    android语音和发短信代码

    在Android平台上,开发语音识别和短信发送功能是常见的需求,特别是在构建交互式应用程序时。本文将深入探讨如何在Android应用中实现这两个功能。 首先,让我们来看看"yuyin"(语音)部分。在Android中,我们可以...

Global site tag (gtag.js) - Google Analytics