1.什么是Intent??
Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。比如说调用startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的BroadcaseReceiver, 再或者由startService()/bindservice()来启动一个后台的service.所以可以看出来,intent主要是用来启动其他activity 或者service,所以可以将intent理解成activity之间的粘合剂。
android intent负责程序跳转和传递数据。如果把Activity比作积木的话,那么Intent就是胶水。也就是把不同的继母粘连起来。或者说Activity是不同的手机屏幕,而intent就是把不同的手机屏幕粘连起来的胶水。
2.拨打电话
Intent intent =new Intent();
intent.setAction(Intent.ACTION_CALL); //设置为拨打电话方式
intent.setData(Uri.parse("tel:110")); //设置电话号码
startActivity(intent);
只有上面的会抛出这样的异常:7-21 10:46:14.074: E/AndroidRuntime(282): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:110 cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{45022230 282:com.alvin.intent.activity/10038} (pid=282, uid=10038) requires android.permission.CALL_PHONE
为了安全,当需要上网,打电话,发短信需要在AndroidManifest.xml中配置相应权限。
在aplication节点外加<uses-permission android:name="android.permission.CALL_PHONE"/>
3.发送短信
Intent intent =new Intent();
intent.setAction(Intent.ACTION_SENDTO); //设置为拨发短信方式
intent.setData(Uri.parse("smsto:5554")); //设置电话号码
intent.putExtra("sms_body", "android is interesting, is it?"); //设置短信内容
startActivity(intent);
<uses-permission android:name="android.permission.SEND_SMS"/>
4.实现Activity间跳转
Intent intent = new Intent();
intent.setClass(TestIntentActivity.this, SecondActivity.class); //实现跳转
startActivity(intent);
只有上面代码会抛出异常:E/AndroidRuntime(396): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.alvin.intent.activity/com.alvin.intent.activity.SecondActivity}; have you declared this activity in your AndroidManifest.xml?
需要在androidManifest.xml中声明:
<activity
android:label="Second"
android:name=".SecondActivity" >
</activity>
5.传递参数
Intent intent = new Intent();
intent.setClass(TestIntentActivity.this, SecondActivity.class); //实现跳转
intent.putExtra("str", "welcome to android world");
startActivity(intent);
setContentView(R.layout.second);
Intent intent = getIntent(); //得到第一个传进来的的Intent
Bundle bundle = intent.getExtras(); //的到Intent里的值
String str = bundle.getString("str");
label = (TextView)findViewById(R.id.label);
label.setText(str);
6.返回参数
startActivityForResult(intent, REQUEST_CODE); //当一个Activity结束时,返回一个值
protected void onActivityResult(int requestCode, int resultCode, Intent data) { //当被调用Activity结束时,会调用该方法
if (requestCode == REQUEST_CODE) {
if (resultCode == SecondActivity.REQUEST_CODE) {
Bundle bundle = data.getExtras();
String str = bundle.getString("back");
Toast.makeText(TestIntentActivity.this, str, Toast.LENGTH_LONG).show();
}
}
}
secondBtn = (Button)findViewById(R.id.secondBtn);
secondBtn.setOnClickListener(listener);
}
private OnClickListener listener = new OnClickListener() { //当点击按钮时,被调用activity结束
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("back", "Back Data");
setResult(REQUEST_CODE, intent); //Call this to set the result that your activity will return to its caller
finish();
}
};