Android(java)学习笔记99:android的短信发送器研究

1.第一种可以调用系统内部的短信程序.

之前我曾经出现过一个bug就是报错:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SENDTO dat=Tel:xxx }……

这是因为我使用intent调用系统编辑短信服务参数没有设置好,后认真核对修改之后,改成如下的样子就没有问题了:

出现这个报错的原因是:

之前我调用Intent启动activity的代码是:

1 Intent intent = new Intent(Intent.ACTION_SENDTO,Uri.parse("sms:“+message);
2 startActivity(intent);

这里调用这个构造方法是不行的,我们回去看API,发现:

Intent(String action, Uri uri)
          Create an intent with a given action and for a given data url.(这要求是给定的数据,也就是常量),也就是说构造方法参数不能是变量

(具体方法实体,可以去看API)

下面使用intent调用系统内部的短信编辑程序

1 Intent intent = new Intent();
2 intent.setAction(Intent.ACTION_SENDTO);
3 intent.setData(Uri.parse("smsto:"+num));
4 intent.putExtra("sms_body", message);
5 startActivity(intent);    

点击一下:发送短信,程序会主动重新跳转到下面的界面,是调用android系统内部的短信编辑程序

2.就是我们不要调用android系统的短信编辑程序,而是编写属于自己短信编辑程序:(程序部分重要代码如下):

 1 sendmess_button.setOnClickListener(new View.OnClickListener() {
 2
 3             @Override
 4             public void onClick(View v) {
 5                 String str2 = "";//切记这里只能定义为"",空字符,之前我定义为null,总是无法弹出发送内容为空的提示
 6                 String num = edit_num.getText().toString();
 7                 String message = edit_mess.getText().toString();
 8                 SmsManager smsManager = SmsManager.getDefault();
 9                 ArrayList<String> texts= smsManager.divideMessage(message);//拆分短信,字数多的短信拆分成多个短信
10
11                 if (message.equals(str2) || num.equals(str2)) {
12                     Toast.makeText(MainActivity.this.getApplicationContext(),
13                             "你个二愣子,你还没输入短信内容或者输入手机号码", 1).show();
14                 }
15                 // Intent intent = new Intent();
16                 // intent.setAction(Intent.ACTION_SENDTO);
17                 // intent.setData(Uri.parse("smsto:"+num));
18                 // intent.putExtra("sms_body", message);
19                 // startActivity(intent);
20
21                 for (String text : texts) {
22                     smsManager.sendTextMessage(num, null, text, null, null);
23                 }
24
25
26             }
27         });

在这之后我也遇到Intent调用拨号出现相应错误:

 1 06-04 04:09:24.285: W/dalvikvm(12398): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
 2 06-04 04:09:24.326: E/AndroidRuntime(12398): FATAL EXCEPTION: main
 3 06-04 04:09:24.326: E/AndroidRuntime(12398): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.CALL dat=Tel:xxx }
 4 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1622)
 5 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417)
 6 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.app.Activity.startActivityForResult(Activity.java:3370)
 7 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.app.Activity.startActivityForResult(Activity.java:3331)
 8 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.app.Activity.startActivity(Activity.java:3566)
 9 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.app.Activity.startActivity(Activity.java:3534)
10 06-04 04:09:24.326: E/AndroidRuntime(12398):     at com.himi.sendmessage.MainActivity$1.onClick(MainActivity.java:47)
11 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.view.View.performClick(View.java:4204)
12 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.view.View$PerformClick.run(View.java:17355)
13 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.os.Handler.handleCallback(Handler.java:725)
14 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.os.Handler.dispatchMessage(Handler.java:92)
15 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.os.Looper.loop(Looper.java:137)
16 06-04 04:09:24.326: E/AndroidRuntime(12398):     at android.app.ActivityThread.main(ActivityThread.java:5041)
17 06-04 04:09:24.326: E/AndroidRuntime(12398):     at java.lang.reflect.Method.invokeNative(Native Method)
18 06-04 04:09:24.326: E/AndroidRuntime(12398):     at java.lang.reflect.Method.invoke(Method.java:511)
19 06-04 04:09:24.326: E/AndroidRuntime(12398):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
20 06-04 04:09:24.326: E/AndroidRuntime(12398):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
21 06-04 04:09:24.326: E/AndroidRuntime(12398):     at dalvik.system.NativeStart.main(Native Method)
22 06-04 04:09:26.744: I/Process(12398): Sending signal. PID: 12398 SIG: 9

这个和上面短信问题一样的,还是基础概念不扎实

时间: 2024-10-08 05:14:40

Android(java)学习笔记99:android的短信发送器研究的相关文章

Android学习笔记(2)——短信发送器

搬运自本人博客:http://www.xgezhang.com/android_sms.html 上一篇文章中我们学着写了一个电话拨号器,这里我们继续来写一个短信发送器. 同样的按一般app开发的步骤,首先先确定下UI界面,大致效果应该是这样: 那么界面要怎么完成了?这种布局可以采用线性布局来做,比较方便.这里还是采用的相对布局,先上xml文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2

Android开发系列(二):短信发送器的实现

我们要实现的目标是:做一个短信发送器 界面: 因为要涉及到短信发送这种属于隐私的问题,所以我们要在AndroidManifest.xml中添加一行代码,来获得权限: <uses-permission android:name="android.permission.SEND_SMS"/> 然后,我们就要配置main.xml: <?xml version="1.0" encoding="utf-8"?> <Linear

android开发学习:打电话和发短信

1.新建一个android项目 File--New--Other--android application project 填写application name(就是应用的名字,比如:天天酷跑) 填写project name(就是程序项目名,比如:TTKP,打包后名字也是TTKP.APP) 填写package name(程序包名,比如cn.tengxun.ttkp) 然后选择最小运行的android版本,最适合版本,编译版本,主题. NEXT--NEXT--选择你android应用图标图片,然后

传播智客学习笔记--L37 BroadcasReceiver和短信拦截

BroadcastReceiver是干什么的? 是观察者模式机制的一个实现 broadcastReceiver平时出于等待状态,直到其订阅的事件被触发 与Activity,ContentProvider一样,需要继承BroadcastReceiver和在Manifest中注册 如何订阅事件? 事件如何发出广播? 广播到底用什么类表示? 广播分为普通广播和有序广播 系统收到的短信广播为有序广播 BroadcastReceiver如何接收广播? 通过意图过滤器 当系统收到订阅的广播Intent后,会

android开发学习笔记000

使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个一直梦想走技术流的再疯狂一次.2014.08.06. 直奔主题——>android开发学习笔记001 android开发学习笔记000

java/android 设计模式学习笔记(5)---对象池模式

这次要介绍一下对象池模式(Object Pool Pattern),这个模式为常见 23 种设计模式之外的设计模式,介绍的初衷主要是在平时的 android 开发中经常会看到,比如 ThreadPool 和 MessagePool 等. 在 java 中,所有对象的内存由虚拟机管理,所以在某些情况下,需要频繁创建一些生命周期很短使用完之后就可以立即销毁,但是数量很大的对象集合,那么此时 GC 的次数必然会增加,这时候为了减小系统 GC 的压力,对象池模式就很适用了.对象池模式也是创建型模式之一,

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

java/android 设计模式学习笔记(10)---建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程.一个复杂的对象有大量的组成部分,比如汽车它有车轮.方向盘.发动机.以及各种各样的小零件,要将这些部件装配成一辆汽车,这个装配过

java/android 设计模式学习笔记(一)---单例模式

前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使用的时候也会有一些坑. PS:对技术感兴趣的同鞋加群544645972一起交流 设计模式总目录 java/android 设计模式学习笔记目录 特点 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的使用很广泛,比如:线程池(threadpool).缓存(cache).对