Intent是一种消息的传递的中介,可以在程序内使用,也可以在程序间使用。它的主要用途有:
. 启动Activity
. 传递参数
. 启动Service
. 启动其它应用
. 发送广播
1、启动Activity
button.setOnClickListener(new OnClickListener(){
@override
public void onClick(View v)
{
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startIntent(intent);
}
})
2、传递参数
- 向下一个活动传递参数
传递参数部分
button.setOnClickListener(new OnClickListener()
{
@override
public void onClick(View v)
{
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
}
}
);
接收参数部分
public class SecondActivity extends Activity{
@override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATRUE_NO_TITLE);
setContentView(R.layout.second_layout);
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
}
}
- 返回数据给上一个活动
button1.setOnClickListener(new OnClickListener()
{
@override
public void onClick(View v)
{
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1);//1为请求码,只需要为唯一值就行,用于回调中判断数据的来源
}
}
);
button2.setOnClickListener(new OnClickListener()
{
@override
public void onClick(View v)
{
Intent intent = new Intent();
intent.putExtra("data_return","Hello FirstActivity"); //第一个参数用于向上一个活动返回处理结果,一般用RESULT_OK或RESULT_CANCELED这两个值,第二个参数是把带有数据的Intent传递回去
finish();
}
}
);
SecondActivity被销毁后,将回调上一个活动即FirstActivity,在FirstActivity中,需要重写onActivityResult()方法
@override
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
switch(requestCode)
{
case 1:
if(resultCode == RESULT_OK)
{
String returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity",returnedData);
break;
}
default:
}
}
如果在SecondActivity中点击的是返回键而不是按钮
@override
public void onBackPressed()
{
Intent intent = new Intent();
intent.putExtra("data_return","Hello FirstActiviy");
setResult(RESULT_OK,intent);
finish();
}
3、启动Service
public class MainActivity extends Activity implements OnClickListener
{
private Button startService;
private Button stopService;
@override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService = (Button)findViewById(R.id.start_service);
stopService = (Button)findViewById(R.id.stopService);
startService.setOnClickListener(this);
stopService.setOnClickListener(this);
}
}
@override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.start_service:
Intent startIntent = new Intent(this,MyService.class);
startService(startIntent);
break;
case R.id.stop_service:
Intent stopIntent = new Intent(this,MyService.class);
stopService(stopIntent);
break;
default:
break;
}
}
4、启动其它程序的活动
package com.example.m06intent01;
import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//打开指定网页
public void browsePageClick(View view){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com/"));
startActivity(intent);
}
//打开拨号面板
public void openDialPageClick(View view){
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}
//直接拨打指定号码
public void dialPhoneClick(View view){
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}
//打开发短信的界面:action+type
public void openMsgPageClick(View view){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setType("vnd.android-dir/mms-sms");
intent.putExtra("sms_body", "具体短信内容"); //"sms_body"为固定内容
startActivity(intent);
}
//打开发短信的界面(指定电话号码):action+data
public void sendMsgClick(View view){
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:18780260012"));
intent.putExtra("sms_body", "具体短信内容"); //"sms_body"为固定内容
startActivity(intent);
}
//播放指定路径音乐
public void playMusicClick(View view){
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///storage/sdcard0/平凡之路.mp3");
//路径也可以写成:"/storage/sdcard0/平凡之路.mp3"
//方法:Intent android.content.Intent.setDataAndType(Uri data, String type)
startActivity(intent);
}
//卸载某个应用程序,根据包名来识别
public void uninstallClick(View view){
Intent intent = new Intent(Intent.ACTION_DELETE);
Uri data = Uri.parse("package:com.example.smyh006intent01");
intent.setData(data);
startActivity(intent);
}
//安装某个应用程序,根据apk的文件名来识别
public void installClick(View view){
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.fromFile(new File("/storage/sdcard0/AndroidTest/smyh006_Intent01.apk"));
//路径不能写成:"file:///storage/sdcard0/···"
intent.setDataAndType(data, "application/vnd.android.package-archive");
//Type的字符串为固定内容
startActivity(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
5、发送广播
public class MyBroadcastReceiver extends BroadcastReceiver
{
@override
public void onReceiver(Context context,Intent intent)
{
Toast.makeText(context,"received in MyBroadcastRecevicer",Toast.LENGTH_SHORT).show();
}
}
<receiver android:name = ".MyBroadcastReceiver">
<intent-filter>
<action android:name = "com.example.broadcasttest.MY_BRODCAST"/>
</intent-filter>
</receiver>
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new OnClickListener()
{
@override
public void onClick(View v)
{
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
}
}
);