android中Intent简单使用

       一. 显式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中添加
		<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 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()方法.因此我们重写这个方法: 
	@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:
  	  }
	}
onActivityResult函数三个请求码,requestCode 就是我们在启动活动时传入的请求码,第二个参数就是我们传入的处理结果,第三个参数就是携带返回数据的intent。对于一个活动,可能会去startActivityForResult多个活动,这个时候我们在onActivityResult方法中首先根本请求码去判断来源,再通过resultCode的值来判断处理结果是否成功.
       重新启动程序,点击按钮,跳转到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




  


 
             
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值