安卓stm32 nes模拟器移植上的信息怎么移植?

查看: 619|回复: 1
项目移植到安卓模拟器上的问题,求大神指教一下啊
阅读权限50
在线时间 小时
D:/t.png大神看看这是为什么啊。求助啊
打赏列表共打赏了0次
还木有人打赏~
阅读权限255
在线时间 小时
不支持安卓模拟器,请用真机
阅读权限255
在线时间 小时
不支持安卓模拟器,请用真机
帮助微信开发者公众号实现盈利..
本版本停止下载,现已发布 v2
2.6.9版本(点我
微特微信大电影系统是微特网络独立开发一套微信
特别声明(务必查看!)
1、HTML5游戏《地毯的
手工端改进端 亲测可运行
***发放补发下视频教
超人】超级商城是什么?
简单来说:是基于微擎系
| 联系方式
COPYRIGHT(C)2015 ZHONGQINGLONGTU NETWORK CO.LTD ALL RIGHTS RESERVED.ICP备号-4
北京中清龙图网络技术有限公司Android:开发环境搭建、移植 - woshiliyuan - 推酷
Android:开发环境搭建、移植 - woshiliyuan
一:搭建Android安卓开发环境
1、eclipse-SDK-4.2-win32.zip
2、JDK(Java Development Kit)
3、ADT,安卓开发的一个eclipse的插件
3、SDK,这里附上的只是一个躯壳,真正的等全部***好了再下载,后面后讲到。
(注意要记住***路劲,后面的环境配置会用到)
***JDK(jdk-7u7-windows-i586)
没有什么特别强调的,一直点Next并记住***位置就可以了,我的是
D:\AndroidLearn\ProgramFiles\Java\jdk1.7.0_07\
D:\AndroidLearn\ProgramFiles\Java\jre7\
***Eclipse(eclipse-SDK-4.2-win32)
解压压缩文件即可,我解压到了D:\AndroidLearn\eclipse-SDK-4.2-win32\eclipse
***SDK(installer_r20.0.3-windows)
直点Next,我的是D:\AndroidLearn\AppData\Local\Android\android-sdk
此时的SDK没有内容,我们需要打开SDK Manager.exe,然后刷新一下,发现Tools里面的android SDK Platform-tools没有***,我们必须***上这个,否则在后面测试环境变量的时候会出问题。
配置环境变量
右键&计算机&点属性-&单击高级系统变量-&点&高级&,&环境变量&
在&系统变量&中新建 J***A_HOME
J***A_HOME= D:\AndroidLearn\Program Files\Java\jdk1.7.0_07(JDK***位置)
在&系统变量&中添加&J***A_JRE_HOME
J***A_JRE_HOME=%J***A_HOME%\jre
在&系统变量&中添加&JRE_HOME
JRE_HOME= D:\AndroidLearn\Program Files\Java\jre7(你的***位置)
在&系统变量&中添加Android_SDK_HOME
Android_SDK_HOME=D:\AndroidLearn\AppData\Local\Android\android-sdk (你的解压位置或者***位置)
在&系统变量&中添加&CLASSPATH
CLASSPATH=.;%J***A_HOME%\%J***A_HOME%\lib\tools.%J***A_HOME%\lib\dt.%JRE_HOME%\%JRE_HOME%\lib\rt.%J***A_JRE_HOME%\%J***A_JRE_HOME%\lib\rt.jar
在&系统变量&中添加&Path(!注意,如果原来有的话只打开即可,然后在原来的内容后面加上分号并复制在后面即可,否则可能会造成系统不稳定)
%Android_SDK_HOME%\platform-%Android_SDK_HOME%\%J***A_HOME%\%JRE_HOME%\%J***A_JRE_HOME%\
检测是否配置成功
A)编写一个HelloWorld.java程序如下所示:
public class HelloWorld
public static void main(String args[])
System.out.println(&Hello World&);
保存在&&&& D:\AndroidLearn中,然后打开cmd,进入dos命令,在提示符后面输入D:\AndroidLearn,则然后javac HelloWorld.java,则编译出HelloWorld.class。再java HelloWorld, 按enter键,则在dos命令中显示HelloWorld!,则说明该部分***成功了
B)在控制台中输入adb,如果出现一下内容则说明该部分成功了,若出现错误请检查环境变量的配置和程序的完整性。
为Eclipse***配置ADT Plugin
ADT是Android提供的一个插件,即Android Development Tools,为开发者提供了一个完整的开发环境。
启动Eclipse,设置工作空间,编写过java的都比较熟悉了,建议设置在一个安全的地方,不要放在C盘,里面存的是你所有的项目
(此步如果出现问题先执行第3步(我这是提醒***失效))选择Help&Install New Software…点Add&Local找到下载的ADT的加压后的文件夹,名称输入ADT Plugin(PS:这里也可以点Archive,然后选择没有解压的zip文件)
点击OK并select All&Next然后根据提示***并重启Eclipse如果出现下面的提示点击&OK&继续***
(第2不顺利进行的话可以忽略此步)选择Help&Install New Software…单击Add在Location输入http://download.eclipse.org/releases/galileo等待刷新,找到wst进行***(wst位于Web, XML, and Java EE Development的下拉列表中)按照提示重启Eclipse
重启后选择Windows&Preferences打开后选择左面的Android出现的谷歌提示可以不用管,直接点Proceed,确定你的SDK Location是否正确,如果不是进行修改。
为Eclipse***配置SDK
点击Windows&Android SDK Manager如图,我们之前下载的SDK远远不够,这里会显示哪些not installed哪些installed 哪些可以update。我建议去论坛或者网上下载一个SDK的压缩包(一般4g多,解压后8G多吧,然后覆盖掉之前我们***的目录
备注:作为实验我们这里只下载了Android 4.0
测试一下模拟器的运行,打开Windows&***D Manager在打开的界面里面点击new将会看到一下界面,输入名称,选择模拟器的版本,输入存储卡的大小,确定屏幕的大小,然后点击Create ***D。
如图则创建好了一个模拟器,点击它,然后点start,然后点击Launch
等待一会儿,让模拟器启动,就可以看见如下界面:
二:使用eclipse.exe生产一个APK文件
运行eclipse.exe
新建一个Android project,File-&new-&project ;wizard配置为Android Application Project,命名为TestApp,build sdk,minimumrequired都选择android4.0 API(我这里其他API没有***),一直next直到finished。
在Form Widgets拖一个Chronmeter控件到activity_main.xml工作区
运行建的工程,run-&run as(第一次运行时会跳出选择窗口,选择Android Application),点击ok
运行完成后bin文件夹下会生产TestApp.apk
至此,apk文件就生产成功了。
把TestApp.apk***到模拟器
注意:此部分可以忽略,因为如果在生成apk文件时,模拟器已开启,一样会自动关联到模拟器。
1、启动Android模拟器
2、 将TestApp.apk文件复制到Android SDK的Tools目录中,使用cmd的cd命令定位到Android 模拟器目录Tools中,执行adb install TestApp.apk命令,这时模拟器将会自动执行***
执行后,虚拟器界面如下
三:把TestApp.apk***到手机
用usb线连接手机到电脑上,把TestApp.apk文件拷贝到你的手机上的sd卡的某个文件夹下。在手机找到你sd卡里刚才放的apk文件,点击就可以***里。***成功后截屏如下:
至此,本文就算完成了,也希望本文能给大家带来帮助,谢谢!
附录:附上一个接触android后,开发的一个小应用截图
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致坚持定成败 记录靠谱助手安卓模拟器程序员的一天
时间:15-08-18 11:07  来源:未知 作者: 编辑:星星
近日,靠谱助手自主研发的天天模拟器成功攻克 AMD 兼容性问题,成为了全国首个完美兼容 AMD 硬件的安卓模拟器。一直以来,因 AMD 硬件的不稳定性而产生的 兼容性问题都是安卓模拟器最底层技术难题,此次靠谱助手的壮举可以说是业内一次登月壮举,实为难得。那么靠谱助手究竟是如何攻破这样一个技术难题呢 ? 带着 这个问题,小编我来到了靠谱助手公司,在后来得知到,原来这个突破,很大功劳归功于这么一位研发技术人员两年来的不懈坚持。
&&&& 近日,靠谱助手自主研发的天天模拟器成功攻克AMD兼容性问题,成为了全国首个完美兼容AMD硬件的安卓模拟器。一直以来,因AMD硬件的不稳定性而产生的 兼容性问题都是安卓模拟器最底层技术难题,此次靠谱助手的壮举可以说是业内一次登月壮举,实为难得。那么靠谱助手究竟是如何攻破这样一个技术难题呢?带着 这个问题,小编我来到了靠谱助手公司,在后来得知到,原来这个突破,很大功劳归功于这么一位研发技术人员两年来的不懈坚持。
&&& 老林,靠谱助手安卓模拟器001号员工,也是公司的第一位研发技术人员,从2013年开始,他在公司已整整呆了2年时间,如今岁数快到达不惑之年。在问到他是如何攻克AMD兼容性问题之时,他只告诉我们,静静的看着他今天的日常工作就知道了。
&&& 今 天,老林10点钟来到了公司,因为最近有新版本更新,前一晚加班到了凌晨,因此请假晚点到公司。到了公司之后,老林稍作歇息便开始继续前一晚的工作,将测 试人员的反馈信息加以分析,如哪个型号的电脑在***了新版本天天模拟器后出现运行缓慢、闪退等情况,老林便从代码源排查问题所在。
&&& 整个过程老林很是熟悉,从靠谱助手创立之初的几个人到现在几百号人的规模,老林一直都在做着这些看似繁琐而重复的事情,从无到有,从零到一再到现在拥有亿级的用户量,一直如此。
&&& 老林心里明白,他的工作对整个软件而言是多么的重要。
&&& 当现有问题全部解决完后,老林又得根据新的功能需求优化产品,将大白话的需求转换成专业程序语言进行调整。身边很多朋友觉得老林的工作太过于乏味,但老林却 认为自己还未能把这件简单的事情做到极致,虽然靠谱助手在许多技术方面都实现创新突破,并且已成功成为市面上兼容性最好,最稳定的安卓模拟器,但仍有很多 地方可优化得更为人性化,让玩家感觉更好玩。然而也只有脚踏实地,不断积累与沉淀,方能做到极致。
&&& 就这么些简单的工作,老林就不知不觉的做到了下午5点,而在这时,突忽其来图形适配问题让他无暇休息。测试部传来了关于一款刚开测的热门手游图形适配问题, 因为国内很多游戏开发图形绘制方法不一样,再加上电脑显卡与手机硬件的图像处理器亦不大一样,导致有些时候游戏可以在手机上运行,但移植到电脑上就无法运 行,这个时候老林就得不停的适配图形转换桥梁,直至做到完全兼容和稳定。
&&& 老林2年来也时不时感觉压力特大,在经历了连续数次的挫折之后也有想过离职,但最终还是坚持了下来。此时他想起自己的一位前同事,当时在公司主要负责AMD硬件的适配,但由于遇到技术瓶颈,通宵了整月之后都没找到突破口,顿时心灰意冷,提了申请离职。
而在后来,靠谱助手还是全面完成了对AMD设备的支持与兼容,当那位离职的技术员工偶然看到这个消息,特地约了老林出去喝酒吃饭,为他庆祝一番,因为只有他们自己才懂得这项技术性突破的来之不易。
&&& 当解决完突忽其来的图像适配问题后,此时月亮已经高高挂起,老林叫了个专车回家,专车司机也是熟人了,经常在这个点坐上他的车。在车上,司机同往常一样与老林搭话,问他又加班到这个点啊了?做IT还是蛮累的啊!
&&& 老林微笑回答着还好,还好,心里想起这两年与靠谱度过的日日夜夜,有辛酸也有苦难,但一想到自己能身处一个真正以玩家为本的互联网公司中,能做出如此具有代表性的安卓模拟器,心里顿时暖暖的。
一周新闻排行
Copyright © 2002- 版权所有 52PK游戏网 渝ICP证B2-号 渝网文(-010号Android 短信的收发及在android模拟器之间实践(二) - 开源中国社区
当前访客身份:游客 [
当前位置:
我们介绍都只是如何发送SMS消息,接下来我们介绍如何接收SMS消息,及另一种发短信的方式并增强为可以发生图片等,最后介绍一下emulator工具。本文的主要内容如下:
6、温故知新之Intent
7、准备工作:SmsMessage类
8、SMS接收程序
9、另一种发送短信的方式:使用Intent
10、增强SMS为MMS
6、温故知新之Intent
此系列前面简单地接受过意图(Intent),这里再次简单介绍一下,在短信接收程序和使用Intent发送SMS中我们要用到。android应用程序的三大组件----Activities、Services、Broadcast Receiver,通过消息触发,这个消息就称作意图(Intent)。下面以Acitvity为例,介绍一下Intent。Android用Intent这个特殊的类实现在Activity与Activity之间的切换。Intent类用于描述应用的功能。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。典型的动作类型有MAIN、VIEW、PICK、EDIT等,我们在短信接收程序中就用到从广播意图中提取动作类型并判断是否是&android.provider.Telephony.SMS_RECEIVED&,进而作深一步的处理。而动作对应的数据则以URI的形式表示。例如,要查看一个人的联系方式,需要创建一个动作为VIEW的Intent,以及表示这个人的URI。
通过解析各种Intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,Activity将会调用startActivity(&指定一个Intent&)方法。然后,系统会在所有已***的应用程序中定义的IntentFilter中查找,找到最匹配的Intent对应的Activity。新的Activity接收到指定的Intent的通知后,开始运行。当startActivity()方法被调用时,将触发解析指定Intent的动作,该机制提供了两个关键的好处:
Activity能够重复利用从其他组件中以Intent形式产生的请求。
Activity可以在任何时候被具有相同IntentFilter的新的Activity取代。
7、准备工作:SmsMessage类
顾名思义,SmsMessage类是一个表示短信的类,为了更好地了解Android的短信机制及以后更好地编写短信相关程序,这里介绍一下该类的公有方法和常量,及嵌套枚举、类成员。
公有方法:
public static int[] calculateLength (CharSequence msgBody, boolean use7bitOnly) 参数: msgBody-要封装的消息、use7bitOnly-如果为TRUE,不是广播特定7-比特编码的部分字符被认为是单个空字符;如果为FALSE,且msgBody包含非7-比特可编码字符,长度计算使用16-比特编码。 返回值: 返回一个4个元素的int数组,int[0]表示要求使用的SMS数量、int[1]表示编码单元已使用的数量、int[2]表示剩余到下个消息的编码单元数量、int[3]表示编码单元大小的指示器。
public static int[] calculateLength (String messageBody, boolean use7bitOnly) 参数和返回值跟上面类似
public static SmsMessage createFromPdu (byte[] pdu) 从原始的PDU(protocol description units)创建一个SmsMessage。这个方法很重要,在我们编写短信接收程序要用到,它从我们接收到的广播意图中获取的字节创建SmsMessage。
public String getDisplayMessageBody() 返回短信消息的主体,或者Email消息主体(如果这个消息来自一个Email网关)。如果消息主体不可用,返回null。这个方法也很重要,在我们编写短信接收程序也要用到。
public String getDisplayOriginatingAddress () 返回信息来源地址,或Email地址(如果消息来自Email网关)。如果消息主体不可用,返回null。这个方法在来电显示,短信接收程序中经常用到。
public String getEmailBody () 如果isEmail为TRUE,即是邮件,返回通过网关发送Email的地址,否则返回null。
public int getIndexOnIcc () 返回消息记录在ICC上的索引(从1开始的)
public String getMessageBody () 以一个String返回消息的主体,如果它存在且是基于文本的。
public SmsMessage.MessageClass getMessageClass () 返回消息的类。
public String getOriginatingAddress () 以String返回SMS信息的来电地址,或不可用时为null。
public byte[] getPdu () 返回消息的原始PDU数据。
public int getProtocolIdentifier () 获取协议标识符。
public String getPseudoSubject ()
public String getServiceCenterAddress () 返回转播消息SMS服务中心的地址,如果没有的话为null。
public int getStatus () GSM:为一个SMS-STATUS-REPORT消息,它返回状态报告的status字段。这个字段表示之前提交的SMS消息的状态。 CDMA:为不影响来自GSM的状态码,值移动到31-16比特。这个值由一个error类(25-16比特)和一个状态码(23-16比特)组成。 如果是0,表示之前发送的消息已经被收到。
public int getStatusOnIcc () 返回消息在ICC上的状态(已读、未读、已发送、未发送)。有下面的几个值:SmsManager.STATUS_ON_ICC_FREE、SmsManager.STATUS_ON_ICC_READ、SmsManager.STATUS_ON_ICC_UNREAD、SmsManager.STATUS_ON_ICC_SEND、SmsManager.STATUS_ON_ICC_UNSENT这几个值在的SmsManager类介绍有讲到。
public static SmsMessage.SubmitPdu getSubmitPdu ( String scAddress, String destinationAddress,
short destinationPort, byte[] data,
boolean statusReportRequested) 参数:scAddress - 服务中心的地址(Sercvice Centre address,为null即使用默认的)、destinationAddress - 消息的目的地址、destinationPort- 发送消息到目的的端口号、data - 消息数据。 返回值:一个包含编码了的SC地址(如果指定了的话)和消息内容的SubmitPdu,否则返回null,如果编码错误。
public static SmsMessage.SubmitPdu getSubmitPdu ( String scAddress, String destinationAddress, String message, boolean statusReportRequested) 和上面类似。
public static int getTPLayerLengthForPDU (String pdu) 返回指定SMS-SUBMIT PDU的TP-Layer-Length,长度单位是字节而不是十六进字符。
public long getTimestampMillis () 以currentTimeMillis()格式返回服务中心时间戳。
public byte[] getUserData () 返回用户数据减去用户数据头部(如果有的话)
public boolean isCphsMwiMessage () 判断是否是CPHS MWI消息
public boolean isEmail () 判断是否是Email,如果消息来自一个Email网关且Email发送者(sender)、主题(subject)、解析主体(parsed body)可用,则返回TRUE。
public boolean isMWIClearMessage () 判断消息是否是一个CPHS 语音邮件或消息等待MWI清除(clear)消息。
public boolean isMWISetMessage () 判断消息是否是一个CPHS 语音邮件或消息等待MWI设置(set)消息。
public boolean isMwiDontStore () 如果消息是一个“Message Waiting Indication Group:Discard Message”通知且不应该保存,则返回TRUE,否则返回FALSE。
public boolean isReplace () 判断是否是一个“replace short message”SMS
public boolean isReplyPathPresent () 判断消息的TP-Reply-Path位是否在消息中设置了。
public boolean isStatusReportMessage () 判断是否是一个SMS-STATUS-REPORT消息。
public static final int ENCODING_16BIT :值为3(0x)
public static final int ENCODING_8BIT :值为2 (0x)
public static final int ENCODING_UNKNOWN :值为0 (0x) ,用户数据编码单元的大小。
public static final int MAX_USER_DATA_BYTES :值为140 (0x0000008c),表示每个消息的最大负载字节数。
public static final int MAX_USER_DATA_BYTES_WITH_HEADER :134 (0x),如果一个用户数据有头部,该值表示它的最大负载字节数,该值假定头部仅包含CONCATENATED_8_BIT_REFENENCE元素。
public static final int MAX_USER_DATA_SEPTETS :值为160 (0x) ,表示每个消息的最大负载septets数。
public static final int MAX_USER_DATA_SEPTETS_WITH_HEADER :值为153 (0x),如果存在用户数据头部,则该值表示最大负载septets数该值假定头部仅包含CONCATENATED_8_BIT_REFENENCE元素。
嵌套枚举成员SmsMessage.MessageClass的枚举值:
public static final SmsMessage.MessageClass CLASS_0
public static final SmsMessage.MessageClass CLASS_1
public static final SmsMessage.MessageClass CLASS_2
public static final SmsMessage.MessageClass CLASS_3
public static final SmsMessage.MessageClass CLASS_UNKNOWN
嵌套枚举成员SmsMessage.MessageClass的公有方法:
public static SmsMessage.MessageClass valueOf (String name):返回值的字符串的值
public static final MessageClass[] values ():返回MessageClass的值数组
嵌套类成员SmsMessage.SubmitPdu的字段:
public byte[] encodedMessage :编码了的消息
public byte[] encodedScAddress :编码的服务中心地址
嵌套类成员SmsMessage.SubmitPdu的公有方法:
public String toString () 返回一个包含简单的、可读的这个对象的描述字符串。鼓励子类去重写这个方法,并提供实现对象的类型和数据。默认实现简单地连接类名、@、十六进制表示的对象哈希码,即下面的形式: getClass().getName() + '@' + Integer.toHexString(hashCode())
8、SMS接收程序
当一个SMS消息被接收时,一个新的广播意图由android.provider.Telepony.SMS_RECEIVED动作触发。注意:这个一个字符串字面量(string literal),但是SDK当前并没有包括这个字符串的引用,因此当要在应用程序中使用它时必须自己显示的指定它。现在我们就开始构建一个SMS接收程序:
1)、跟SMS发送程序类似,要在清单文件AndroidManifest.xml中指定权限允许接收SMS:&uses-permission android:name=&android.permission.RECEIVER_SMS&/&
为了能够回发短信,还应该加上发送的权限。
2)、应用程序***SMS意图广播,SMS广播意图包含了到来的SMS细节。我们要从其中提取出SmsMessage对象,这样就要用到pdu键提取一个SMS PDUs数组(protocol description units--封装了一个SMS消息和它的元数据),每个元素表示一个SMS消息。为了将每个PDU byte数组转化为一个SMS消息对象,需要调用SmsMessage.createFromPdu。
每个SmsMessage包含SMS消息的详细信息,包括起始地址(***号码)、时间戳、消息体。下面编写一个接收短信的类SmsReceiver代码如下:
.conblogs.
import android.content.BroadcastR
import android.content.C
import android.content.I
import android.os.B
import android.telephony.SmsM
import android.telephony.SmsM
import android.widget.T
public class SmsReceiver extends BroadcastReceiver {
public void onReceive(Context _context, Intent _intent) {
if (_intent.getAction().equals(SMS_RECEIVER)) {
SmsManager sms = SmsManager.getDefault();
Bundle bundle = _intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get(&pdus&);
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i & pdus. i++)
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
for (SmsMessage message : messages) {
String msg = message.getMessageBody();
String to = message.getOriginatingAddress();
if (msg.toLowerCase().startsWith(queryString)) {
String out = msg.substring(queryString.length());
sms.sendTextMessage(to, null, out, null, null);
Toast.makeText(_context, &success&,
Toast.LENGTH_LONG).show();
private static final String queryString=&@echo&;
private static final String SMS_RECEIVER=
&android.provider.Telephony.SMS_RECEIVED&;
上面代码的功能是从接收到的广播意图中提取来电号码、短信内容,然后将短信加上@echo头部回发给来电号码,并在屏幕上显示一个Toast消息提示成功。
9、另一种发送短信的方式:使用Intent
我们使用SmsManager类实现了发送SMS的功能,且并没有用到内置的客户端。实际上,我们很少这样做,自己在应用程序中去完全实现一个完整的SMS客户端。相反我们会去利用它,将需要发送的内容和目的手机号传递给内置的SMS客户端,然后发送。
下面我就向大家介绍如何利用Intent实现利用将我们的东西传递给内置SMS客户端发送我们SMS。为了实现这个功能,就要用到startActivity(&指定一个Intent&)方法,且指定Intent的动作为Intent.ACTION_SENDTO,用sms:指定目标手机号,用sms_body指定信息内容。java源文件如下所示:
import android.app.A
import android.content.I
import android.net.U
import android.os.B
import android.view.V
import android.widget.B
import android.widget.EditT
import android.widget.T
public class TextMessage extends Activity {
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnSend = (Button) findViewById(R.id.btnSend);
edtPhoneNo = (EditText) findViewById(R.id.edtPhoneNo);
edtContent = (EditText) findViewById(R.id.edtContent);
btnSend.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String phoneNo = edtPhoneNo.getText().toString();
String message = edtContent.getText().toString();
if (phoneNo.length() & 0 && message.length() & 0) {
Intent smsIntent=new Intent(Intent.ACTION_SENDTO,
Uri.parse(&sms:&+edtPhoneNo.getText().toString()));
smsIntent.putExtra(&sms_body&, edtContent.getText().toString());
TextMessage.this.startActivity(smsIntent);
Toast.makeText(getBaseContext(),
&Please enter both phone number and message.&,
Toast.LENGTH_SHORT).show();
private Button btnS
private EditText edtPhoneNo;
private EditText edtC
注意代码中的红色粗体部分,就是实现这个功能的核心代码!布局文件maim.xml和值文件string.xml跟上篇中的一样,这里不再累述。运行结果如下图:
图2、程序主界面
点击send按钮之后,转到内置的SMS客户端并且将我们输入的值传入了,如下图:
图3、内容传至内置SMS客户端
发送之后,5556号android模拟器会收到我们发送的消息,如下图:
图5、发送之后5556号android模拟器收到消息
10、增强SMS为MMS
我们讲了这么多,都还只是实现了简单的发生SMS的功能,如果我们想发送图片、音频怎么办(⊙o⊙)?不急,现在我们就将第9节介绍的SMS发送程序改造为MMS。
我们可以附加一个文件到我们的消息做为附件发送,用Intent.EXTRA_STREAM和附件资源的Uri做为参数调用putExtra()方法,附加到信息。并设置Intent的类型为mime-type。要注意的是:内置的MMS并不包括一个ACTION_SENDTO动作的Intent接收器,我们需要使用的动作类型是ACTION_SEND,并且目标手机号不在是使用sms:而是address。主要代码如下:
// Get the URI of a piece of media to attach.
Uri attached_Uri = Uri.parse(&content://media/external/images/media/1&);
// Create a new MMS intent
Intent mmsIntent = new Intent(Intent.ACTION_SEND, attached_Uri);
mmsIntent.putExtra(&sms_body&, edtContent.getText().toString());
mmsIntent.putExtra(&address&, edtPhoneNo.getText().toString());
mmsIntent.putExtra(Intent.EXTRA_STREAM, attached_Uri);
mmsIntent.setType(&image/png&);startActivity(mmsIntent);
将这段代码替换第9节中的红色粗体代码,就完成而来一个MMS的构建。
PS:这篇文章本应该很早就该发出来了,在6月20号就写好了,但由于现在的工作环境完全隔离了Internet,家里又还没有开通网络;还有一个原因是现在工作比较忙!请大家见谅,能够继续支持我,让我有动力写下去。还有一点,这篇文章在我电脑上放久了,对当时的状态有些忘了,不知道文中有什么遗漏和错误,请大家指出!
原文出处:/skynet/archive//1775166.html
共有1个评论

参考资料

 

随机推荐