首页 > 代码库 > 从零开始学android<Intent初步.四十.>

从零开始学android<Intent初步.四十.>

Intent意图是android中非常重要的部分,他在Activity,service中有较为广泛的应用。

1
public void startActivity(Intent intent)
普通
启动一个Activity,并通过Intent传送数据
2
public void startActivityForResult(Intent intent, int requestCode)
普通
启动并接收另一个Activity程序回传数据,当requestCode大于0才可以触发onActivityResult()
3
public Intent getIntent()
普通
返回启动当前Activity程序的Intent
4
protected void onActivityResult(int requestCode, int resultCode, Intent data)
普通
当需要接收Intent回传数据的时候覆写此方法对回传操作进行处理
5
public void finish()
普通
调用此方法会返回之前的Activity程序,并自动调用onActivityResult()方法
6
public final Cursor managedQuery (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
普通
处理返回的Cursor结果集


接下里用例子逐步讲解


最简单的Intent

主界面xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="141dp"
        android:text="转跳" />

</RelativeLayout>

转跳界面Xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是第二屏界面" />

</RelativeLayout>


package com.example.intent1;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button button;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) this.findViewById(R.id.button1);
		button.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(MainActivity.this, Other.class);//创建Intent 对象
				startActivity(intent);//开启intent
				MainActivity.this.finish();//使当前Activity结束
			}
		});

	}

}


Otner.java

package com.example.intent1;

import android.app.Activity;
import android.os.Bundle;
import android.text.style.SuperscriptSpan;

public class Other extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
	// TODO Auto-generated method stub
	super.onCreate(savedInstanceState);
	setContentView(R.layout.other);
}
}






接下来看一看可以传递数据的Intent



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="传递" />

    <EditText
        android:id="@+id/edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:text=" />

</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="传递" />

    <EditText
        android:id="@+id/edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:text="" />

</RelativeLayout>


Other.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <Button
        android:id="@+id/button2"
        android:gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取数据" />

</LinearLayout>



java文件


package com.example.intent2;

import android.os.Bundle;
import android.R.integer;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
private Button button;
private EditText info;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  button=(Button)this.findViewById(R.id.button1);
  info=(EditText)this.findViewById(R.id.edit);
  button.setOnClickListener(new View.OnClickListener() {
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
	Intent intent=new Intent(MainActivity.this,Other.class);//设置意图
				intent.putExtra("info", info.getText().toString());//为意图增加附加信息
	startActivity(intent);//开始意图
	MainActivity.this.finish();//终止当前Ativity
	}
});
        
    }
    
}


Other.java

package com.example.intent2;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class Other extends Activity {
	Intent intent;
	private Button button;
	private TextView text;
@Override

protected void onCreate(Bundle savedInstanceState) {
	// TODO Auto-generated method stub
	super.onCreate(savedInstanceState);
	super.setContentView(R.layout.other);
	button=(Button)this.findViewById(R.id.button2);
	text=(TextView)this.findViewById(R.id.textView1);
	intent=super.getIntent();//获取意图对象
	button.setOnClickListener(new View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
		
			String info=intent.getStringExtra("info");//获取传递的数据
			text.setText(info);//显示数据
		}
	});
	
	
}
}







使用Intent传递并返回数据

借助Intent实现成人身高体重测试程序

采用BMI 法 
 
体重指数 =  体重(公斤) 除 身高(米)的平方    kg/m2      
正常体重 : 体重指数 = 18 - 25 
超重           : 体重指数 = 25 - 30 
轻度肥胖 : 体重指数 > 30 
中度肥胖 : 体重指数 > 35 
重度肥胖 :  体重指数 > 40 

xml

package com.example.inten3;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
private Button resetInfo,getInfo;
private EditText height,weight;
private TextView detail;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
   super.setContentView(R.layout.activity_main);
   resetInfo=(Button)this.findViewById(R.id.button1);//重置信息按钮
   getInfo=(Button)this.findViewById(R.id.button2);//获取信息按钮
   height=(EditText)this.findViewById(R.id.editText1);//身高输入框
   weight=(EditText)this.findViewById(R.id.editText2);//体重输入框
   detail=(TextView)this.findViewById(R.id.textView3);//信息显示
//   重置按钮的监听
   resetInfo.setOnClickListener(new View.OnClickListener() {
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
//将他们都设置为空
	weight.setText("");
	height.setText("");
	detail.setText("");
	}
});
//  获取信息按钮的监听
   getInfo.setOnClickListener(new View.OnClickListener() {
	
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
	Intent intent =new  Intent(MainActivity.this, Other.class);//创建意图对象
//	增加附加信息
intent.putExtra("weight", Double.valueOf(weight.getText().toString()));
intent.putExtra("height", Double.valueOf(height.getText().toString()));
//设置启动并传递请求码
startActivityForResult(intent, 1);
	
	}
});
  
    }
//    处理返回的信息
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		switch (resultCode) {
		case RESULT_OK:
			//设置信息
			MainActivity.this.detail.setText(data.getStringExtra("endMsg"));
			
			break;

		default:
			break;
		}
	}
    
}

Other.java

package com.example.inten3;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Other extends Activity {
	private Button returnMsg, resetbut;
	private TextView weightMsg, heightMsg;
	private Double weight, height;

	private String endMsg;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.other);
		returnMsg = (Button) this.findViewById(R.id.Otherbutton1);
		resetbut = (Button) this.findViewById(R.id.Otherbutton2);
		weightMsg = (TextView) this.findViewById(R.id.OthertextView1);
		heightMsg = (TextView) this.findViewById(R.id.OthertextView2);
		// 获取意图对象
		Intent intent = super.getIntent();
		// 获得参数
		weight = intent.getDoubleExtra("weight", 0);
		height = intent.getDoubleExtra("height", 0);
		weightMsg.setText("您的体重:" + weight + "KG");
		heightMsg.setText("您的身高:" + height + "CM");
		returnMsg.setOnClickListener(new View.OnClickListener() {
			// 对传入的数据进项判断和处理
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Double heightNum = height / 100;
				double endNum = weight / (heightNum * heightNum);
				if (endNum >= 18 && endNum <= 25) {
					endMsg = "您的身体很正常哦,继续保持亲。";
				} else if (endNum < 18) {
					endMsg = "亲啊,不能总是减肥啊,您现在可是偏瘦哦,当心身体";
				} else if (endNum > 25 && endNum <= 30) {
					endMsg = "您现在有一点胖哦,不过不要紧,要注意饮食哦";
				} else if (endNum > 30 && endNum <= 35) {
					endMsg = "亲,您已经进入肥胖人群 了哦,注意锻炼哦";

				} else if (endNum > 35) {
					endMsg = "额,你,你。。你怎么可以这样,还不赶快减肥,当心找不到对象哦";
				}
				// 将参数设置到intnet上
				Other.this.getIntent().putExtra("endMsg", endMsg);
				// 设置返回集,并设置返回接受码
				Other.this.setResult(RESULT_OK, Other.this.getIntent());
				// 将dangqianActivity结束掉
				Other.this.finish();
			}

		});
		// 重新输入监听
		resetbut.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				// 设置返回集合取消状态码
				Other.this.setResult(RESULT_CANCELED, Other.this.getIntent());
				// 结束当前Activity
				Other.this.finish();
			}
		});
	}
}






学习了intent的基本用途,下节我们来学习Intent调用系统指令来完成一些其他操作


下节预报:Intent进阶

从零开始学android<Intent初步.四十.>