码迷,mamicode.com
首页 > 移动开发 > 详细

我的Android笔记--Intent下,印象中常用的用法

时间:2016-07-31 14:26:08      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:

 

1,拨打电话

     
Intent intent = new Intent(Intent.ACTION_DIAL);
Uri uri = Uri.parse("tel:" + "1511690XXXX");
intent.setData(uri);
startActivity(intent);

 

2,发送短信

 
Uri uri = Uri.parse("smsto:1511690XXXX");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.putExtra("sms_body", "这是消息主体");
startActivity(intent);

  

 

3,获取短信验证码

     在获取完验证码以后,注册一个广播接受者,Action是"android.provider.Telephony.SMS_RECEIVED",另外注意权限设置。
    接收短信的时候注意内容长度,内容超过2条时可能会出现异常状况。另外对于广播接受者也要注册合适的接口回调交互数据。
    在接收者的onReceive方法中处理数据。
     
@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
 
    if (ACTION_RECEIVER.equals(action)) {
        Object[] pdus = (Object[]) intent.getExtras().get("pdus");
 
        for (Object pdu : pdus) {
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
            String sender = smsMessage.getDisplayOriginatingAddress();
            //短信内容
            String content = smsMessage.getDisplayMessageBody();
            long date = smsMessage.getTimestampMillis();
            Date timeDate = new Date(date);
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String time = simpleDateFormat.format(timeDate);
 
            //过滤不需要读取的短信的发送号码
            if ("10086".equals(sender) && receiverSMS != null) {
                receiverSMS.callBack(content);
                abortBroadcast();
                break;
            }
        }
 
    }
}  
 

4,使用Intent重启应用

     
final Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
 

5,Intent之setFlags()

     需要注意的是,Context也可以使用startActivity()方法启动一个Activity,但是必须在传递的intent上调用addFlags()方法,参数使用Intent. Intent.FLAG_ACTIVITY_NEW_TASK,否则会报异常。 
     有时候有这么一个需求,我们打开一堆Activity,从A跳到B,然后C,然后D,再D页面处理逻辑结束之前,BCD页面是不能finish的,但是D页面逻辑结束后需要清除BC,直接跳转回A页面,这个时候使用Intent的setFlags()方法传输特定的flags就可以完成需求了。
 
Intent intent = new Intent(this, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
 
     对于flag这个参数有很多值,记录下我常用的。
     Intent.FlAG_ACTIVITY_CLEAR_TOP。文档中给的注释是:
     
If set, and the activity being launched is already running in the
current task, then instead of launching a new instance of that activity,
all of the other activities on top of it will be closed and this Intent
will be delivered to the (now on top) old activity as a new Intent.
 
<p>For example, consider a task consisting of the activities: A, B, C, D.
If D calls startActivity() with an Intent that resolves to the component
of activity B, then C and D will be finished and B receive the given
Intent, resulting in the stack now being: A, B.
 
<p>The currently running instance of activity B in the above example will
either receive the new intent you are starting here in its
onNewIntent() method, or be itself finished and restarted with the
new intent.  If it has declared its launch mode to be "multiple" (the
default) and you have not set {@link #FLAG_ACTIVITY_SINGLE_TOP} in
the same intent, then it will be finished and re-created; for all other
launch modes or if {@link #FLAG_ACTIVITY_SINGLE_TOP} is set then this
Intent will be delivered to the current instance‘s onNewIntent().
 
<p>This launch mode can also be used to good effect in conjunction with
{@link #FLAG_ACTIVITY_NEW_TASK}: if used to start the root activity
of a task, it will bring any currently running instance of that task
to the foreground, and then clear it to its root state.  This is
especially useful, for example, when launching an activity from the
notification manager.
 
<p>See <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">
Tasks and Back  Stack</a> for more information about tasks.
翻译过来是:启动的activity已经运行在当前的任务中,那么它不是启动一个新的activity,而是将所有在这个activity上面的其它同栈activity清除掉,这个意图将会被传递到久活动中作为一个新的意图。
                 例如,一个任务中存在:A,B,C,D四个页面。D调用包含这个flag的意图的statrtActivity()方法启动B页面,C和D被清楚掉,B会接收到传递的意图,栈中现在是A,B。
                 正在运行的前面的B_activity的实例可能会在他的onNewIntent()方法中接收一个新的Intent或者结束他本身以后接收新的意图重启。这两种处理方式和他本身的启动方式有关,如果是默认的multiple模式,那么会接收新Intent重启自身,如果是{@link #FLAG_ACTIVITY_SINGLE_TOP}的启动模式,这个新意图会被传递到当前实例activity的onNewIntent()方法中。
                   这个启动模式结合{@link #FLAG_ACTIVITY_NEW_TASK}使用也是很有效的:如果一个任务中使用它中启动一个根activity,它会将该任务的当前运行实例呈现在首页,然后明确其根状态。例如,当从通知管理器启动一个activity时是尤其有用的。
 
     Intent.FLAG_ACTIVITY_NO_HISTORY。这个flag使用起来简单一些。使用它启动的activity不会被压入栈中。例如,A,B。B通过这个flag打开C,C再打开D,但是D返回的时候不会经过C,直接回到B。
 

6,PendingIntent

     使用PendingIntent需要注意的是它的getActivity(),getService()和getBrocast()方法,对于包装里的intent,有时对于类参数的设定,最好用Class.forName()来设置。
 
Intent还有很多用途,现在我只记录下还记得的,以后会逐渐添加的。
              
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

我的Android笔记--Intent下,印象中常用的用法

标签:

原文地址:http://www.cnblogs.com/wdh-blog/p/5722874.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!