Android利用Intent啟動(dòng)和關(guān)閉Activity
一、簡(jiǎn)介
Android應(yīng)用程序中一般都有多個(gè)Activity,在Activity中,通過(guò)調(diào)用StartActivity方法,并在該方法的參數(shù)中傳遞Intent對(duì)象,就可以實(shí)現(xiàn)不同Activity之間的切換和數(shù)據(jù)傳遞。
通過(guò)StartActivity方法傳遞intent對(duì)象來(lái)啟動(dòng)另一個(gè)Activity時(shí),可分為兩類:
l 顯式啟動(dòng):在創(chuàng)建的Intent對(duì)象中明確指定啟動(dòng)的是哪個(gè)Activity;
l 隱式啟動(dòng):安卓系統(tǒng)根據(jù)Intent的動(dòng)作和數(shù)據(jù)決定應(yīng)該啟動(dòng)哪個(gè)Activity。
1、顯式啟動(dòng)Activity
通過(guò)Intent顯式啟動(dòng)一個(gè)Activity時(shí),必須先創(chuàng)建一個(gè)Intent對(duì)象,并在該對(duì)象的構(gòu)造函數(shù)中指明要啟動(dòng)的目標(biāo)組件名。例如:
var intent = new Intent(this, typeof(Activity1)); StartActivity(intent);
在這種情況下,除了intent對(duì)象以外,沒(méi)有其他方式可以匹配組件名。
2、隱式啟動(dòng)Activity
隱式啟動(dòng)Activity是指Android系統(tǒng)根據(jù)過(guò)濾規(guī)則自動(dòng)去匹配對(duì)應(yīng)的Intent,即不需要在Intent對(duì)象中明確指明啟動(dòng)的是哪個(gè)Activity,而是讓Android系統(tǒng)來(lái)決定應(yīng)該啟動(dòng)誰(shuí)。在這種情況下,Android系統(tǒng)會(huì)自動(dòng)匹配最適合處理intent的一個(gè)或多個(gè)Activity。匹配的Activity可能是應(yīng)用程序自身的,也可能是Android系統(tǒng)內(nèi)置的,還可能是第3方應(yīng)用程序提供的。因此,隱式啟動(dòng)這種方式更強(qiáng)調(diào)了Android應(yīng)用程序中組件的復(fù)用性。
注意,如果希望讓你的程序通過(guò)Activity展示某些動(dòng)作,例如打電話、發(fā)郵件、發(fā)短信,或者使用activity中的數(shù)據(jù)等。這時(shí)候,首先考慮調(diào)用系統(tǒng)提供的功能去實(shí)現(xiàn)(即:隱式啟動(dòng)Activity的方式)。在這種情況下,只需要通過(guò)Intent指定相應(yīng)的動(dòng)作即可,這是intent真正體現(xiàn)其價(jià)值的地方。例如:
var call = new Intent(Intent.ActionCall); //初始化一個(gè)電話呼叫 call.SetData(Android.Net.Uri.Parse("tel:13811112222")); StartActivity(call);
下面是常用的一些動(dòng)作常量:
注意:用C#表示這些動(dòng)作常量時(shí),鍵入“Intent.”然后選擇一個(gè)常量即可。這些可選擇的常量去掉了分隔單詞的下劃線,并將每個(gè)單詞的首字母改為大寫,其他字母改為小寫,例如:Intent.ActionCall。
除了指定相應(yīng)的動(dòng)作以外,還可以同時(shí)指定Uri,這種情況下,Android會(huì)調(diào)用內(nèi)置的瀏覽器來(lái)隱式啟動(dòng)一個(gè)Activity。例如:
Intent intent=new Intent(Intent.ActionView, Uri.Parse("http://www.google.com");
StartActivity(intent);
3、關(guān)閉Activity
調(diào)用Finish()可終止activity。也可以調(diào)用FinishActivity() 來(lái)終止你之前啟動(dòng)了的一個(gè)獨(dú)立的activity。
記?。?/strong>顯式關(guān)閉Activity僅用于你絕對(duì)不想讓用戶再返回這個(gè)activity的實(shí)例的情況。多數(shù)情況下,都不應(yīng)該顯式調(diào)用Finish()或者FinishActivity()來(lái)關(guān)閉acitivity,而是應(yīng)該讓系統(tǒng)為你去管理它。 二、示例—ch1201IntentDemo
該例子演示如何通過(guò)Intent撥打電話,以及如何啟動(dòng)另一個(gè)Activity。
本例子需要應(yīng)用程序具有“CALL_PHONE”權(quán)限。
1、運(yùn)行截圖
運(yùn)行前先在模擬器中添加一些聯(lián)系人及其電話號(hào)碼(模擬器本身有這個(gè)功能,直接在模擬器中操作即可),然后再測(cè)試要撥出的號(hào)碼。
下面左圖是該例子的主界面,右圖是單擊【打電話】按鈕后,在第2個(gè)界面中撥出的電話號(hào)碼截圖。
下圖是單擊【轉(zhuǎn)到活動(dòng)1】按鈕后的運(yùn)行截圖。
2、主要設(shè)計(jì)步驟
(1)添加“CALL_PHONE”權(quán)限
在【解決方案資源管理器】中,鼠標(biāo)雙擊項(xiàng)目的【Properties】進(jìn)入下面的界面,然后勾選“CALL_PHONE”選項(xiàng):
設(shè)置后,系統(tǒng)就會(huì)自動(dòng)在AndroidManifest.xml中添加下面的代碼:
<uses-permission android:name="android.permission.CALL_PHONE" />
(2)添加ch1201_Main.axml
在Resources\layout文件夾下添加該文件,模板選擇【Layout】:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/btn1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="打電話" /> <Button android:id="@+id/btn2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="轉(zhuǎn)到活動(dòng)1" /> </LinearLayout>
(3)添加ch1201_Layout1.axml
在Resources\layout文件夾下添加該文件,模板選擇【Layout】:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="這是活動(dòng)1的界面\n\n提示:按【Back】按鈕返回" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView1" android:layout_gravity="center" android:layout_margin="30dp" /> </LinearLayout>
(4)添加ch1201IntentDemoMain.cs
在SrcDemos文件夾下添加該文件,模板選擇【Activity】:
using Android.App; using Android.Content; using Android.OS; using Android.Widget; namespace MyDemos.SrcDemos { [Activity(Label = "【例12-1】Intent基本用法1")] public class ch1201IntentDemoMain : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ch1201_Main); //啟動(dòng)電話撥號(hào)的Activity FindViewById<Button>(Resource.Id.btn1).Click += delegate { var call = new Intent(Intent.ActionCall); call.SetData(Android.Net.Uri.Parse("tel:13811112222")); StartActivity(call); }; //啟動(dòng)自定義的Activity FindViewById<Button>(Resource.Id.btn2).Click += delegate { var intent = new Intent(this, typeof(ch1201IntentDemoActivity1)); StartActivity(intent); }; } } }
(5)添加ch1201IntentDemoActivity1.cs
在SrcDemos文件夾下添加該文件,模板選擇【Activity】:
using Android.App; using Android.OS; namespace MyDemos.SrcDemos { [Activity(Label = "【例12-1】Intent基本用法1")] public class ch1201IntentDemoActivity1 : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ch1201_Layout1); } } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android中點(diǎn)擊按鈕啟動(dòng)另一個(gè)Activity及Activity之間傳值問(wèn)題
- Android中Activity的四種啟動(dòng)模式和onNewIntent()
- Android Activity的啟動(dòng)過(guò)程源碼解析
- 分析Android Activity的啟動(dòng)過(guò)程
- Android 中啟動(dòng)自己另一個(gè)程序的activity如何實(shí)現(xiàn)
- Android 啟動(dòng)另一個(gè)App/apk中的Activity實(shí)現(xiàn)代碼
- 關(guān)于Android中點(diǎn)擊通知欄的通知啟動(dòng)Activity問(wèn)題解決
- Android 啟動(dòng)activity的4種方式及打開其他應(yīng)用的activity的坑
- 通過(guò)實(shí)例解析android Activity啟動(dòng)過(guò)程
相關(guān)文章
Android繼承ViewGroup實(shí)現(xiàn)Scroll滑動(dòng)效果的方法示例
這篇文章主要介紹了Android繼承ViewGroup實(shí)現(xiàn)Scroll滑動(dòng)效果的方法,結(jié)合實(shí)例形式分析了Android滑動(dòng)效果的原理及擴(kuò)展ViewGroup實(shí)現(xiàn)滑動(dòng)功能的相關(guān)操作技巧,需要的朋友可以參考下2017-08-08Android編程判斷網(wǎng)絡(luò)是否可用及調(diào)用系統(tǒng)設(shè)置項(xiàng)的方法
這篇文章主要介紹了Android編程判斷網(wǎng)絡(luò)是否可用及調(diào)用系統(tǒng)設(shè)置項(xiàng)的方法,涉及Android針對(duì)網(wǎng)絡(luò)連接的判定及屬性設(shè)置的調(diào)用,需要的朋友可以參考下2016-03-03android實(shí)現(xiàn)倒計(jì)時(shí)動(dòng)態(tài)圈
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)倒計(jì)時(shí)動(dòng)態(tài)圈,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01Android ListView 實(shí)例講解清晰易懂
這篇文章主要通過(guò)實(shí)例介紹了Android ListView,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Android編程實(shí)現(xiàn)等比例顯示圖片的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)等比例顯示圖片的方法,實(shí)例分析了Android等比例縮放圖片的具體步驟與相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11解析Android中如何做到Service被關(guān)閉后又自動(dòng)啟動(dòng)的實(shí)現(xiàn)方法
本篇文章是對(duì)在Android中如何做到Service被關(guān)閉后又自動(dòng)啟動(dòng)的方法進(jìn)行了詳細(xì)的分析和介紹。需要的朋友參考下2013-05-05monkeyrunner環(huán)境搭建及實(shí)例教程(3)
這篇文章主要為大家詳細(xì)介紹了monkeyrunner環(huán)境搭建及實(shí)例教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android中檢查、監(jiān)聽電量和充電狀態(tài)的方法
這篇文章主要介紹了Android中檢查、監(jiān)聽電量和充電狀態(tài)的方法,如判斷當(dāng)前充電狀態(tài)、監(jiān)聽充電狀態(tài)的改變、判斷當(dāng)前剩余電量等,需要的朋友可以參考下2014-06-06Android?Studio支持安卓手機(jī)投屏功能詳解
這篇文章主要給大家介紹了關(guān)于Android?Studio支持安卓手機(jī)投屏功能的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)有需要的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-01-01