【android基础】Intent

来源:互联网 发布:上海网络推广培训学校 编辑:程序博客网 时间:2024/06/04 01:12

intent  [意图]

理解为一个画面跳转的桥梁



显式启动  的intent

//要从Activity1跳转画面到Activity2,需要新建一个Intent,并启动Intent intent = new Intent( Activity1.this  , Activity2.class);StartActivity(intent);
第一句的第一个参数是 应用程序的上下文context,所以可以用this来代替.

                  第二个参数是目标组将,显式意图是直接指名要跳转的组将,class.



补充:每次新建一个Activity的时候记得在Mainfest的<application>的节点下加一句

<activity android:name="     新加入的Activity的名字  "     />

隐式启动  的intent

Intent intent =new Intent(Intent.ACTION_VIEW, Uri.Parse("http://www.baidu.com"));StartActivity(intent);
所谓隐式,就是由系统自己决定怎么启动,不用刻意去想.

比如上面,要打开一个网址,系统就会决定用什么浏览器去打开,不用设置(默认是系统自带的浏览器)

第一句的第一个参数是Intent的动作.

       常用的有以下:

    ACTION_ANSWER                        接听电话

    ACTION_CALL                               拨号,uri数字部分作为号码

    Action_CALL_BUTTON      通话记录

    ACTION_DIAL                                打开拨号界面,显示uri数字部分作为电话

    ACTION_VIEW                 最常用,根据uri打开相应的

 ACTION_MAIN                标识Activity为一个程序的开始

  Action.ALL_APPS              列出所有的应用

  ACTION_SENDTO             发送短息

  其他用到我再加上来...少用到就不一一说

         第二个参数是Uri对象.其中使用 uri.parse("String")可以将字符串转化为uri对象(parse翻译:[描述]


Sub-Acitivity(返回值) 方式启动

   这个意思就是父Activity 启动了 子Activity  ,并且要求其返回值回到父Acitivity.不像前面两个例子那样相互独立.

   其实方法很简单只需要改了下面那句~

显式:

//要从Activity1跳转画面到Activity2,需要新建一个Intent,并启动

Intent intent = new Intent( Activity1.this , Activity2.class);

StartActivityForResult(intent,1);

隐式

Intent intent =new Intent(Intent.ACTION_VIEW, Uri.Parse("http://www.baidu.com"));

StartActivityForResult(intent,2);

不同的是最后一句话而已,而他的第二个参数是requestCode ,填数字的,是识别码.一个父Activity可以有几个子Activity,所以就需要有识别码了.


而在子Activity中在finish()前调用 setResult(RESULT_OK,intent) 来返回值~返回的类型是intent,其实要的是intent(none,uri)中的uri信息.

当子Actiity关闭时,会自动调用启动他的父的  onActivityResult (intrequestCode, int resultCode , intent  data).

第一个参数是 识别码  ,获取对应的识别码的返回数据/

第二个参数是返回状态~~就是setResult的第一个参数.有RESULT_OK 和 RESULT_CANCELED

第三个参数是返回的主要数据,就是setResult的第二个参数

下面举个例子:

  父Activity:

       private static final int SUBACTIVITY1=1;      Intent intent =new intent(this,SubActivity.class);      startActivityForResult(intent,SUBACTIVITY1);         @Override   public void onActivityResult(int requestCode , int  resultCode , intent  data){   //当子Activity关闭后自动调用              Super.onActivityResult(requestCode , resultCode , data);          switch(requestCode){          case  SUBACTIVITY1:                      if(resultCode ==Activity.RESULT_OK){                          Uri.uriData=data.getData();                       }else if (resultCode == Activity.RESULT_CANCEL) {}                     break;                }             }

子Activity:

Uri data=Uri.parse("tel:"+tel_number);     //设置Uri对象Intent result=new Intent(null,date);       //放进intentresult.putExtra("address","JD Street");    //补充额外数据setResult(RESULT_OK,result);              //返回值给父finish();


Intent Filter[意图过滤器]

 是用来识别intent 的隐式启动.写在manifest文件里面的<Activity>节点下.

他有三个标签   <action>动作       <category>类别       <data>数据



BroadcastReceiver [广播消息 ]

发送广播

Intent intent =new Intent( "com. example.test");     //string是一个标识符,通常用包名intent.putExtra("key1","vaule1");                    //放入一个数据与其标志intent.putExtra("key2","value2");                  sendBroadcast(intent);                              //发送广播

在manifest中注册receiver

<receiver android:name=".myreceiver">     <intent-filter>              <action android:name="com.example.test"  />     </intent-filter></receiver>
action的名字是与标识符对应的~~


接收广播:

public class myreceiver extends BroadcastReceiver{     @Override      public void onReceive(Context context , Intent intent){                String msg =intent.getStringExtra("key1");      }}

这样就接收到了.接收广播不需要程序一直运行的,而且某个view注册的广播是整个程序通用的.


0 0