一. 显式Intent
1.intent跳转activity
Intent intent =new Intent(FirstActivity.this,secondactivity.class);
startActivity(intent);
二.隐式Intent
1.新建一个项目,新建第二个ThiredActivity,在Androidmanifest.xml里面注册这个activity。在activity里面添加如下代码:
<activity android:name=".ThiredActivity"> <intent-filter> <action android:name="dyk.intent.ACTIVITY_START" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>在<action>标签中指明了当前活动可以相应的 dyk.intent.ACTIVITY_START 这个action , category 标签更精确地指明了当前能够相应的intent还可能带有的category.只有<action>和<category>中的内容同时能够匹配上intent中指定的action和actegory时,这个activity才能够相应intent.
下面测试一下:在第一个activity里面按钮的点击事件如下:
Intent intent =new Intent("dyk.intent.ACTIVITY_START"); startActivity(intent);由于 < category android :name= "android.intent.category.DEFAULT" />是Android默认的category,所以,当你点击按钮是跳转到ThiredActivity。不过,这次是通过隐式Intent来启动的。
由于每个intent只能有一个action,却能指定多个category,下面我们修改代码,增加一个category.代码如下
Intent intent =newIntent("dyk.intent.ACTIVITY_START");
intent.addCategory("com.dyk.My_CSTEGORY"); startActivity(intent);
重新运行程序,程序挂了。。。,没有任何一个活动可以响应我们的intent,因为我们刚刚添加了intent.addCategory("com.dyk.My_CSTEGORY"),所有没有活动可以找到。我们在Androidmanifest.xml中添加重新运行程序,你会发现程序又正常运行了,关于隐式intent讲解就到这里了。(源码在文章底部)<activity android:name=".ThiredActivity"> <intent-filter> <action android:name="dyk.intent.ACTIVITY_START" /> <category android:name="android.intent.category.DEFAULT" /><category android:name="com.dyk.My_CSTEGORY" /></intent-filter> </activity>
比如用Intent直接拨打电话
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+"15985432345"));
MainActivity.instance.startActivity(intent);
关于intent跳转到手机系统的奇特界面以及使用,可以参考Intent.class类~
三.intent传递数据
看下最简单的: Intent intent =new Intent(firstactivity.this,secondActivity.class);
intent.putExtra("ex","nanshu");//第一个参数是键,第二个参数是值
startActivity(intent);
在secondActivity取数据:
Intent intent =getIntent(); String data =intent.getStringExtra("ex"); Log.i("TAG","data= "+data);
下面看一下数据回传:从A跳转到B,获取到B回传给A的数据
A跳转B:Intent intent =new Intent(activity.this,getBackDataActivity.class);startActivityForResult(intent,1);我们用startActivityForResult来启动getBackDataActivity活动,请求码是1.在getBackDataActivity中,按钮点击事件如下:Intent intent =new Intent(); intent.putExtra("returndata","nanyin"); setResult(RESULT_OK,intent); finish();我们构建了一个intent,并且丢了一个String数据进去.setResult方法接受两个参数,第一个参数表示向上一个activity返回处理结果,一般只用RESULT_OK或者RESULT_CANCELED两个值的 。第二个参数则是把有数据的intent传递回去,然后调用finish()函数来结束当前活动.由于我们使用startActivityForResult方法来启动getBackDataActivity,在getBackDataActivity销毁后会回调上一个活动的onActivityResult()方法.因此我们重写这个方法:onActivityResult函数三个请求码,requestCode 就是我们在启动活动时传入的请求码,第二个参数就是我们传入的处理结果,第三个参数就是携带返回数据的intent。对于一个活动,可能会去startActivityForResult多个活动,这个时候我们在onActivityResult方法中首先根本请求码去判断来源,再通过resultCode的值来判断处理结果是否成功.@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode){ case 1: if(resultCode ==RESULT_OK){ String resultdata =data.getStringExtra("returndata"); Log.i("TAG activity","resultdata: "+resultdata); } break; default: } }重新启动程序,点击按钮,跳转到getBackDataActivity,然后点击getBackDataActivity中的按钮返回activity,信息打印:如果用户没有点击按钮,而是直接Back键回退,这个时候我们可以监听onBackPredded()函数,代码:@Override public void onBackPressed() { Intent intent =new Intent(); intent.putExtra("returndata","nanyin"); setResult(RESULT_OK,intent); finish(); }一样也可以获取到数据。关于Android中intent的讲解就到这里了,~~~~ 源码
github