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();
}
};