当前位置: 编程技术>移动开发
本页文章导读:
▪Activity 技艺 屏幕 进度条 控制 Activity 技巧 屏幕 进度条 控制
锁定 Activity 运行时的屏幕方向 <activity android:name=".EX01"
android:label="@string/app_name"
android:screenOrientation="portrait" // 竖屏 , 值为 landscape 时为横屏
…………
<.........
▪ Mms短信接收流程分析(1) Mms短信接收流程分析(一)
在Mms源码AndroidMenifest中与sms接收相关的receiver:PrivilegedSmsReceiver和SmsReceiver,前者继承后者,接收广播后调用后者的onReceiveWithPrivilege()方法处理,而主要不同是.........
▪ 菜鸟——Objective c 编写简单的计算器 初学者——Objective c 编写简单的计算器
首先用Interface Builder做出一个简单的计算器图形:先再.h文件中定义好输出口,全局变量还有方法@interface calculatorViewController : UIViewController {
IBOutlet UITe.........
[1]Activity 技艺 屏幕 进度条 控制
来源: 互联网 发布时间: 2014-02-18
Activity 技巧 屏幕 进度条 控制
锁定 Activity 运行时的屏幕方向
全屏的 Activity
在 Activity 的 Title 中加入进度条
锁定 Activity 运行时的屏幕方向
<activity android:name=".EX01" android:label="@string/app_name" android:screenOrientation="portrait" // 竖屏 , 值为 landscape 时为横屏 ………… </activity>
全屏的 Activity
// 设置全屏模式 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 去除标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE);
在 Activity 的 Title 中加入进度条
// 不明确进度条 requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.main); setProgressBarIndeterminateVisibility(true); // 明确进度条 requestWindowFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.main); setProgress(5000);
[2] Mms短信接收流程分析(1)
来源: 互联网 发布时间: 2014-02-18
Mms短信接收流程分析(一)
在Mms源码AndroidMenifest中与sms接收相关的receiver:PrivilegedSmsReceiver和SmsReceiver,前者继承后者,接收广播后调用后者的onReceiveWithPrivilege()方法处理,而主要不同是申明了android.permission.BROADCAST_SMS,用来阻止SMS spoofing//关于SMS spoofing资料待查。
PrivilegedSmsReceiver接收android.provider.Telephony.SMS_RECEIVED。在SMSDispatcher,Handle中处理case:EVENT_NEW_SMS,其中函数dispatchMessage调用dispatchPdus发出OrderedBroadcast:SMS_RECEIVED,同时请求了一个足以让receiver去取得自己wake lock的wake lock,这里要说一下,在SmsMessage.createFromPdu()方法已经分析了message是cdma还是gsm,因此调用相应类的dispatchMessage函数。
回来继续分析PrivilegedSmsReceiver,接收到广播后,调用父类的onReceiveWithPrivilege()方法,并传递参数privileged=true,这里就进行了判断,对于没有permission的信息,直接ignore。
启动SmsReceiverService之前,用mStartingServiceSync同步请求了一个wake lock,在SmsReceiverService的handleMessage中release the wake lock.
关于SmsReceiverService,下面引一段前人的笔记:
.transaction.SmsReceiverService ,它被创建时首先 初始化了新的工作线程(HandlerThread对象)用来在后台完成相关动作,紧接着在onStartCommand方法里会将具体的任务通过消息(即调用service的Intent)发送给工作线程进行处理。根据 Intent.Action的名称,工作线程会处理4中情况:
A.系统启动完成后BOOT_COMPLETED:把发件箱(outbox)中的消息移动到发送队列(QueuedBox),然后开始发送队列中的消息,最后调用updateNewMessageIndicator方法更新状态栏消息指示图标;
B.处理Sms接收handleSmsReceived:从Intent中取得消息对象,直接显示给用户(Class0类型)或者保持到数据库中。
C.处理Sms发送handleSmsSent:从待发送消息队列中取得消息,并按次序逐个发送;
D.处理通讯网络状态改变handleServiceStateChanged:用户从无信号状态进入有信息号状态后,继续执行发送任务的情况。
handleSmsReceived调用insertMessage方法,其中:
1、sms.getProtocolIdentifier()=0x40,直接返回null,不做任何处理。
2、sms.getMessageClass() = CLASS_0,直接显示信息
3、sms.isReplace()=true,替换原来数据库里面的短信
4、如果以上情况都不是,直接保存到uri:content://sms/inbox
调用MessagingNotification.blockingUpdateNewMessageIndicator()用Notification或者toast的方式提醒用户接收到新信息。
在Mms源码AndroidMenifest中与sms接收相关的receiver:PrivilegedSmsReceiver和SmsReceiver,前者继承后者,接收广播后调用后者的onReceiveWithPrivilege()方法处理,而主要不同是申明了android.permission.BROADCAST_SMS,用来阻止SMS spoofing//关于SMS spoofing资料待查。
PrivilegedSmsReceiver接收android.provider.Telephony.SMS_RECEIVED。在SMSDispatcher,Handle中处理case:EVENT_NEW_SMS,其中函数dispatchMessage调用dispatchPdus发出OrderedBroadcast:SMS_RECEIVED,同时请求了一个足以让receiver去取得自己wake lock的wake lock,这里要说一下,在SmsMessage.createFromPdu()方法已经分析了message是cdma还是gsm,因此调用相应类的dispatchMessage函数。
回来继续分析PrivilegedSmsReceiver,接收到广播后,调用父类的onReceiveWithPrivilege()方法,并传递参数privileged=true,这里就进行了判断,对于没有permission的信息,直接ignore。
启动SmsReceiverService之前,用mStartingServiceSync同步请求了一个wake lock,在SmsReceiverService的handleMessage中release the wake lock.
关于SmsReceiverService,下面引一段前人的笔记:
.transaction.SmsReceiverService ,它被创建时首先 初始化了新的工作线程(HandlerThread对象)用来在后台完成相关动作,紧接着在onStartCommand方法里会将具体的任务通过消息(即调用service的Intent)发送给工作线程进行处理。根据 Intent.Action的名称,工作线程会处理4中情况:
A.系统启动完成后BOOT_COMPLETED:把发件箱(outbox)中的消息移动到发送队列(QueuedBox),然后开始发送队列中的消息,最后调用updateNewMessageIndicator方法更新状态栏消息指示图标;
B.处理Sms接收handleSmsReceived:从Intent中取得消息对象,直接显示给用户(Class0类型)或者保持到数据库中。
C.处理Sms发送handleSmsSent:从待发送消息队列中取得消息,并按次序逐个发送;
D.处理通讯网络状态改变handleServiceStateChanged:用户从无信号状态进入有信息号状态后,继续执行发送任务的情况。
handleSmsReceived调用insertMessage方法,其中:
1、sms.getProtocolIdentifier()=0x40,直接返回null,不做任何处理。
2、sms.getMessageClass() = CLASS_0,直接显示信息
3、sms.isReplace()=true,替换原来数据库里面的短信
4、如果以上情况都不是,直接保存到uri:content://sms/inbox
调用MessagingNotification.blockingUpdateNewMessageIndicator()用Notification或者toast的方式提醒用户接收到新信息。
[3] 菜鸟——Objective c 编写简单的计算器
来源: 互联网 发布时间: 2014-02-18
初学者——Objective c 编写简单的计算器
首先用Interface Builder做出一个简单的计算器图形:
先再.h文件中定义好输出口,全局变量还有方法
连接好输出口,按下Ctrl键并从file's Owner中拖到text框中选择好合适的textfield输出口
之后要注意file's Owner的链接,按住ctrl从file's Owner拖到要显示的窗口,再选中要控制按钮,再按花+2键在里面找到touch up inside,点住后面的圆点拖到file's Owner中,按钮依次照做。
再在.m文件中写入方法:首先是buttonpressed方法,里面有对按钮的识别和每个运算方法的调用。
之后就是对每个运算方法的调用。这里举一个加法的例子,其他运算方法套用即可,还有一个清零的方法
功能并不是很多,主要是运用到了一些基本的知识。自己需要注意的是字符串的连接
还有int型转化为string型:
string型转化为int型:
首先用Interface Builder做出一个简单的计算器图形:
先再.h文件中定义好输出口,全局变量还有方法
@interface calculatorViewController : UIViewController { IBOutlet UITextField *textField; int number; BOOL function; BOOL isFlage; BOOL isResult; BOOL isAgain; BOOL isPress; NSString *num; NSString *nums; int TEMP; } @property(retain,nonatomic)UITextField *textField; - (IBAction)buttionPressed:(id)sender; - (void)plus:(id)sender:(NSString *)value; - (void)minus:(id)sender:(NSString *)value; - (void)multiple:(id)sender:(NSString *)value; - (void)divide:(id)sender:(NSString *)value; - (void)clearshow:(id)sender:(int)value; @end
连接好输出口,按下Ctrl键并从file's Owner中拖到text框中选择好合适的textfield输出口
之后要注意file's Owner的链接,按住ctrl从file's Owner拖到要显示的窗口,再选中要控制按钮,再按花+2键在里面找到touch up inside,点住后面的圆点拖到file's Owner中,按钮依次照做。
再在.m文件中写入方法:首先是buttonpressed方法,里面有对按钮的识别和每个运算方法的调用。
- (IBAction)buttionPressed:(id)sender{ if (!isFlage) { num = [sender titleForState:UIControlStateNormal]; nums = [[NSString alloc] initWithFormat:@"%@%@",textField.text,num]; textField.text = nums; }else { if (!isPress) { isFlage=FALSE; num = [sender titleForState:UIControlStateNormal]; nums = [[NSString alloc] initWithFormat:@"%@",num]; textField.text = nums; } } [self plus:sender:nums]; [self minus:sender:nums];› [self multiple:sender :nums]; [self divide:sender :nums]; [self clearshow:sender:number]; if ([num isEqualToString:@"="]) { isPress=TRUE; isFlage=TRUE; switch (TEMP) { case 1: number=number+[nums intValue]; textField.text=[NSString stringWithFormat:@"%d",number]; isResult=TRUE; break; case 2: number=number-[nums intValue]; textField.text=[NSString stringWithFormat:@"%d",number]; isResult=TRUE; break; case 3: number=number*[nums intValue]; textField.text=[NSString stringWithFormat:@"%d",number]; isResult=TRUE; break; case 4: number=number/[nums intValue]; textField.text=[NSString stringWithFormat:@"%d",number]; isResult=TRUE; break; default: break; } } }
之后就是对每个运算方法的调用。这里举一个加法的例子,其他运算方法套用即可,还有一个清零的方法
- (void)plus:(id)sender:(NSString *)value{ num = [sender titleForState:UIControlStateNormal]; if ([num isEqualToString:@"+"]) { TEMP=1; isPress=FALSE; isFlage=TRUE; if (isResult) { function=FALSE; } if (!function) { number=number+[value intValue]; }else{ function=TRUE; isResult=FALSE; number=[value intValue]; } textField.text=[NSString stringWithFormat:@"%d",number]; } } - (void)clearshow:(id)sender:(int)value{ num = [sender titleForState:UIControlStateNormal]; if ([num isEqualToString:@"Clear"]) { number=0; isFlage=FALSE; textField.text=[NSString stringWithFormat:@"%d",number]; } }
功能并不是很多,主要是运用到了一些基本的知识。自己需要注意的是字符串的连接
nums = [[NSString alloc] initWithFormat:@"%@%@",textField.text,num];
还有int型转化为string型:
textField.text=[NSString stringWithFormat:@"%d",number];
string型转化为int型:
[value intValue];
最新技术文章: