//打电话 class SendCallClickListener implements OnClickListener {iphone5 public void onClick(View v) { //调用Android系统API打电话 Uri uri = Uri.parse("tel:15800001234"); Intent intent = new Intent(Intent.ACTION_CALL, uri); startActivity(intent); } }
第一种信息格式: 点击发送短信,自动跳转到编辑短信的位置,用户自己编辑短信
//发短信 class SendMsgClickListener implements OnClickListener { public void onClick(View v) { //调用Android系统API发送短信 Uri uri = Uri.parse("smsto:15800001234"); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); intent.putExtra("sms_body", "android..."); startActivity(intent); } }
第二种信息格式:是系统自动发送短信
SmsManager smsManager =SmsManager.getDefault(); smsManager.sendTextMessage(电话号码, null, "短信被容", null, null); Toast.makeText(context, "发送成功", Toast.LENGTH_SHORT).show();
最后不要忘了做这些操作是需要授权的,需要在AndroidManifest.xml中加入两行配置 <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.SEND_SMS"/>
UIView内存释放,之前一直以为把alloc的UIView对象,最后release掉或者removeFromSuperview掉就可以了。但是最近项目中出现了当释放父试图时,子视图的内存不释放,最后导致内存泄漏,报内存警告最后程序崩溃。
造成UIview内存泄漏的原因是,当释放UIView时,其子视图中有占有的资源没有释放掉,如动画没有结束,最后造成内存不会释放掉。
下面的代码能够很好的展示上述过程:
在主视图上添加一个AnimationView,然后在AnimationView中在添加一个视图:
Animations *animationView=[[Animations alloc] initWithFrame:CGRectMake(10, 10, 270, 400)];
[animationView setBackgroundColor:[UIColor yellowColor]];
[self addSubview:animationView];
[animationView release];
在Animations视图中添加一个递归的动画:
- (void)wobble {
NSLog(@">>>>>>>>>>>>>>>>>>");
CGFloat rotation = (kWobbleRadians * M_PI * 2) / 360.0;
CGAffineTransform wobbleLeft = CGAffineTransformMakeRotation(rotation);
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:kWobbleTime];
[UIView setAnimationDelegate:self];
self.transform = wobbleLeft;
// if (!releaseFlage) {
[UIView setAnimationDidStopSelector:@selector(wobble)];
// }
[UIView setAnimationRepeatAutoreverses:NO];
[UIView commitAnimations];
}
由于当前类每隔3秒钟要执行一次递归,所以当在主视图中移除AnimationView时,由于AnimationView的子视图动画是一个递归没有结束,所以当前这个视图树不会释放,只是不再界面上显示,最终造成内存泄漏。解决办法如下,当AnimationView想要移除时,需要将其子视图上的动画移除掉。我的做法是在AnimationView中添加下面方法即可:
- (void)willRemoveSubview:(UIView *)subview
{
Animations *downBookView=(Animations *)subview;
downBookView.releaseFlage=TRUE;
}
这样内存其视图树就会跟着释放掉内存,从系统中彻底释放掉了。
使用activityGroup 中多个view中进行切换时如果遇到textview中无法自动弹出虚拟键盘时
解决办法:
,onResume方法中清理textview.clearFocus();这样就会因为几个子的activity都
光标占用光标的问题。
比如说:
activityGrop(或者tab)有多个View,如果是view1 切换到 view2 时:
1.view1.clearFocus(); //先清除view1的焦点,view2就能自动弹出键盘了。
2.如果你的view是一个activity
一般是在onResume 或者onPause方法中清除焦点.在子activity生命周期中onCreate 中不设置请求光标
(textview.requestFoucs())
view1.clearFocus(); //先清除view1的焦点,view2就能自动弹出键盘了。
view2在onResume方法中也要清除焦点。
如果还是没办法出来的话代码中写onClick 事件,或者onFocus事件都可以
view.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { if(v.hasFocus()){ ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)) .showSoftInput(ed_content, InputMethodManager.SHOW_FORCED); }else{ ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(ed_content.getWindowToken(), 0); } } });