Android 四大組件——Activity

一肴沫、簡(jiǎn)介

Activity略贮,安卓四大組件之一。

每個(gè) Activity 都會(huì)獲得一個(gè)用于繪制其用戶界面的窗口茫陆。窗口通常會(huì)充滿屏幕金麸,但也可小于屏幕并浮動(dòng)在其他窗口之上。

Android是使用任務(wù)(Task)來(lái)管理Activity的簿盅,一個(gè)任務(wù)就是一組存放在棧里的Activity集合挥下,這個(gè)棧被稱作返回棧,棧(堆棧)是一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)桨醋,這里順便提一下另一種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu):隊(duì)列棚瘟,隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。

當(dāng)啟動(dòng)一個(gè)新的Activity時(shí)喜最,它會(huì)被放入返回棧中偎蘸,并處于棧頂?shù)奈恢谩C慨?dāng)我們按下Back鍵或調(diào)用activity的finish()方法去銷毀一個(gè)活動(dòng)時(shí)返顺,處于棧頂?shù)腁ctivity會(huì)出棧禀苦,這時(shí)前一個(gè)入棧的Activity就會(huì)重新處于棧頂?shù)奈恢谩O到y(tǒng)總是會(huì)顯示處于棧頂?shù)腁ctivity給用戶遂鹊。

二振乏、知識(shí)點(diǎn)

1、生命周期

Activity生命周期是每一個(gè)Android開(kāi)發(fā)者都必須掌握的秉扑,當(dāng)我們深入理解活動(dòng)的生命周期之后慧邮,就可以寫(xiě)出更加連貫流暢的程序调限,讓我們的程序擁有更好的用戶體驗(yàn)


image

簡(jiǎn)單來(lái)說(shuō),Activity的生命周期可分為6+1的組成的模式(6分為三對(duì))

1.1误澳、6個(gè)常見(jiàn)的生命周期方法:
onCreate() 當(dāng)Activity創(chuàng)建時(shí)執(zhí)行

onStart() 當(dāng)Activity可見(jiàn)時(shí)執(zhí)行(可見(jiàn)了耻矮,但是看不到,沒(méi)獲得焦點(diǎn))

onResume() 當(dāng)Activity獲取焦點(diǎn)是執(zhí)行

onPause() 當(dāng)Activity失去焦點(diǎn)時(shí)執(zhí)行

onStop() 當(dāng)Activity不可見(jiàn)時(shí)執(zhí)行

onDestroy() 當(dāng)Activity銷毀時(shí)執(zhí)行

(獲取焦點(diǎn)才算真正可見(jiàn)忆谓,因?yàn)楂@取了焦點(diǎn)用戶才可以操作裆装,所以可見(jiàn)但是看不到這句話不矛盾)

加1就是加上這個(gè):

onRestart() 當(dāng)Activity正在重新啟動(dòng)時(shí)執(zhí)行。

就上面的6個(gè)常見(jiàn)的生命周期:

他們可以說(shuō)是根據(jù)特征可以分成三組的:

onCreate() 對(duì)應(yīng) onDestroy() 創(chuàng)建和銷毀

onStart() 對(duì)應(yīng) onStop() 可見(jiàn)和不可見(jiàn)

onResume() 對(duì)應(yīng) onPause() 獲取焦點(diǎn)和失去焦點(diǎn)
注意事項(xiàng):
  1. onPause()和onStop()被調(diào)用的前提是: 打開(kāi)了一個(gè)新的Activity倡缠!而前者是舊Activity還可見(jiàn)的狀態(tài)哨免;后者是舊Activity已經(jīng)不可見(jiàn)!
  2. 另外昙沦,親測(cè):AlertDialog和PopWindow是不會(huì)觸發(fā)上述兩個(gè)回調(diào)方法的~
1.2琢唾、生命周期方法逐個(gè)分析

最普通的正常的情況下我們點(diǎn)開(kāi)一個(gè)新的Activity然后按下返回鍵關(guān)了這個(gè)Activity生命周期是這樣子走的:

點(diǎn)開(kāi)一個(gè)新的Activity(還沒(méi)開(kāi)啟過(guò)): 先執(zhí)行onCreate,緊接著執(zhí)行onStart盾饮,接著這行onResume采桃,然后就停在這個(gè)onResume,我們做一些操作嘛丘损。 按下返回鍵:執(zhí)行onPause普办,接著onStop,然后onDestroy号俐,執(zhí)行了onDestroy了Activity也就銷毀了泌豆。

onCreate()
當(dāng)Activity被創(chuàng)建時(shí)的調(diào)用的方法定庵。只在創(chuàng)建的時(shí)候調(diào)用一次吏饿。 可以在這個(gè)方法里面做一些初始化的工作,比如setContentView加載布局文件蔬浙,初始化一些變量的值等猪落。這個(gè)是開(kāi)發(fā)中最常見(jiàn)的方法。

onStart()
Activity已經(jīng)可見(jiàn)了畴博,但是還沒(méi)辦法進(jìn)行交互笨忌,可以說(shuō)我們還看不見(jiàn)。(不要糾結(jié)這句看不見(jiàn)俱病,我們這里本文對(duì)于看見(jiàn)的理解是官疲,我必須要能交互我才算看見(jiàn),不然你說(shuō)給我看見(jiàn)但是我不能操作屏幕有什么意思亮隙。)

onResume()
Activity已經(jīng)獲取焦點(diǎn)了途凫,Activity處于可見(jiàn)的前臺(tái)了。用戶可以進(jìn)行交互了在這個(gè)階段溢吻。也可以理解為维费,必須獲取焦點(diǎn)才能進(jìn)行交互。
假設(shè)甲Activity是可見(jiàn)的可交互的,但是這時(shí)我們的乙Activity(一個(gè)新的非全屏的Activity或者一個(gè)透明的Activity)至于棧頂時(shí)犀盟,即在任務(wù)棧里我們的乙位甲的上方而晒,此刻我們的甲Activity就會(huì)處于Paused狀態(tài)了,也就是可見(jiàn)但是沒(méi)能進(jìn)行交互阅畴。

onPause()
Activity已經(jīng)失去焦點(diǎn)了倡怎。用戶沒(méi)有辦法在這個(gè)Activity進(jìn)行操作了。一般來(lái)說(shuō)當(dāng)用戶按下Home鍵或者按下Back鍵就會(huì)執(zhí)行這個(gè)方法贱枣,這個(gè)方法執(zhí)行后緊跟著都是執(zhí)行onStop() 如果是按下back鍵:onPause() → onStop() → onDestroy() 如果是按下Home鍵:onPause() → onStop()
onPause方法不能不能進(jìn)行回收工作诈胜,簡(jiǎn)單說(shuō)就是這里進(jìn)行回收工作很可能會(huì)拖慢影響其他Activty的顯示,后面會(huì)涉及到冯事。 回收和清理工作輕一點(diǎn)的科技交給onStop焦匈,重一些的交給onDestroy。

onStop()
Activity不可見(jiàn)了昵仅。 在這個(gè)方法我們可以進(jìn)行一些比較簡(jiǎn)單的回收工作缓熟。

onDestroy()
Activity被銷毀了遮精,這個(gè)Activity死掉了乎婿,出棧了烦绳,拜拜了名党。 在這里我們可以做一些最終的回收和資源釋放的工作诚撵。

onRestart()
Activity正在重新啟動(dòng)艺演,也就是從不可見(jiàn)變?yōu)榭梢?jiàn)的一個(gè)過(guò)程都许。 當(dāng)用戶按下Home鍵然后有回到當(dāng)前程序塞绿,就會(huì)執(zhí)行這個(gè)方法命辖,或者當(dāng)用戶從當(dāng)前甲Activity打開(kāi)一個(gè)新的Activity况毅,然后又back鍵返回到甲Activity,又或者用戶按下任務(wù)列表尔艇,然后選擇了剛剛打開(kāi)過(guò)的那個(gè)程序尔许,那么這個(gè)方法也會(huì)執(zhí)行。
2终娃、Activity的四個(gè)狀態(tài)

每個(gè)Activity在其生命周期中最多可能會(huì)有四種狀態(tài)味廊。

1.運(yùn)行狀態(tài)
  當(dāng)一個(gè)Activity位于返回棧的棧頂時(shí),這時(shí)Activity就處于運(yùn)行狀態(tài)棠耕,系統(tǒng)會(huì)將處于棧頂?shù)腁ctivity顯示給用戶余佛。
2.暫停狀態(tài)
   當(dāng)一個(gè)Activity不再處于棧頂位置,但仍然可見(jiàn)窍荧,這時(shí)Activity就進(jìn)入了暫停狀態(tài)辉巡。初學(xué)者可能會(huì)有這樣的疑問(wèn),既然Activity都已經(jīng)不在棧頂了搅荞,怎么會(huì)還可見(jiàn)呢红氯,這是因?yàn)椴⒉皇敲恳粋€(gè)Activity都會(huì)占滿整個(gè)屏幕的框咙,比如對(duì)話框形式的Activity只會(huì)占用屏幕中間的部分區(qū)域。
3.停止?fàn)顟B(tài)
    當(dāng)一個(gè)Activity不再處于棧頂位置痢甘,并且完全不可見(jiàn)的時(shí)候喇嘱,就進(jìn)入了停止?fàn)顟B(tài)。
4.銷毀狀態(tài)
    當(dāng)一個(gè)Activity從返回棧中移除后就變成了銷毀狀態(tài)塞栅。
3者铜、Activity的創(chuàng)建-關(guān)閉過(guò)程
1.自定義Activity類名,繼承Activity類或者它的子類;
2.重寫(xiě)onCreate()方法放椰,在該方法中調(diào)用setContentView()設(shè)置要顯示的視圖文件(R.layout.activity);
3.在AndroidManifest.xml文件中對(duì)Activity進(jìn)行配置;
4.啟動(dòng)Activity調(diào)用StartActivity(Intent);
5.關(guān)閉Activity調(diào)用finish()方法直接關(guān)閉當(dāng)前Activity;
4作烟、Activity的四種啟動(dòng)模式
1 .standard 默認(rèn)的啟動(dòng)模式,標(biāo)準(zhǔn)模式
結(jié)論:每開(kāi)啟一個(gè)Activity,就會(huì)在棧頂添加一個(gè)Activity實(shí)例砾医。多次間隔或者直接啟動(dòng)一個(gè)甲Activity會(huì)添加多個(gè)甲的示例拿撩,可重復(fù)添加。(間隔 ABA, 直接 ACC或者AAA)

這里我們需要明白一個(gè)事情如蚜,Service和ApplicationContext是沒(méi)辦法直接開(kāi)啟一個(gè)新的Activity压恒,因?yàn)橹挥蠥ctivity類型的Context的Activity才能開(kāi)啟,但還是有解決辦法的错邦,那就是讓我們要開(kāi)的那個(gè)新的Activity設(shè)置為FLAG_ACTIVITY_NEW_TASK標(biāo)識(shí)探赫。

2 .singletop 單一頂部模式 (頂部不會(huì)重復(fù))

結(jié)論:如果開(kāi)啟的Activity已經(jīng)存在一個(gè)實(shí)例在任務(wù)棧的頂部(僅限于頂部),再去開(kāi)啟這個(gè)Activity,任務(wù)棧不會(huì)創(chuàng)建新的Activity的實(shí)例了撬呢,而是復(fù)用已經(jīng)存在的這個(gè)Activity伦吠,onNewIntent方法被調(diào)用;之前打開(kāi)過(guò)魂拦,但不是位于棧頂毛仪,那么還是會(huì)產(chǎn)生新的實(shí)例入棧,不會(huì)回調(diào)onNewIntent方法晨另。

當(dāng)我們把一個(gè)Activity設(shè)置為singleTop潭千,當(dāng)我們點(diǎn)擊打開(kāi)這個(gè)Activity的時(shí)候谱姓,我們打開(kāi)B頁(yè)面借尿,會(huì)出現(xiàn)幾種情況:

說(shuō)明:當(dāng)前A和C都是Standard,B是singleTop

之前沒(méi)打開(kāi)過(guò): 此時(shí)任務(wù)棧里面只有A屉来,A所在的任務(wù)棧是S1路翻,這個(gè)時(shí)候打開(kāi)singleTop的B,B入棧茄靠,入的是S1這個(gè)棧茂契,誰(shuí)打開(kāi)它進(jìn)入誰(shuí)的棧,此時(shí)S1的情況是BA慨绳,B為棧頂掉冶。

之前打開(kāi)過(guò)真竖,但是位于棧頂: 那么復(fù)用這個(gè)棧,不會(huì)有新的實(shí)例壓入棧中厌小。同時(shí) onNewIntent 方法會(huì)被回調(diào)恢共,我們可以利用這個(gè)方法獲得頁(yè)面?zhèn)鬟^(guò)來(lái)的消息或者其他操作。

之前打開(kāi)過(guò)璧亚,但是不是位于棧頂: 那么還是會(huì)產(chǎn)生新的實(shí)例入棧讨韭。

3 .singleTask 單一任務(wù)

(整個(gè)任務(wù)棧只有一個(gè)對(duì)應(yīng)自身的實(shí)例) 結(jié)論:如果開(kāi)啟的甲Activity已經(jīng)存在一個(gè)實(shí)例在任務(wù)棧S1,再去開(kāi)啟這個(gè)Activity癣蟋,位于棧頂則直接復(fù)用透硝,回調(diào)onNewIntent方法;位于里面疯搅,也是復(fù)用濒生,回調(diào)onNewIntent方法,復(fù)用的同時(shí)的是直接把自己上方的全部Activity都干掉幔欧。

當(dāng)我們把一個(gè)Activity設(shè)置為singleTask模式之后甜攀,當(dāng)我們點(diǎn)擊開(kāi)啟這個(gè)Activity,會(huì)出現(xiàn)3種情況:

說(shuō)明:打開(kāi)B琐馆,A和C是Standard规阀,B是singleTask

之前沒(méi)開(kāi)啟過(guò):A開(kāi)啟B的時(shí)候,B進(jìn)入A的任務(wù)棧瘦麸。為了頂部

之前開(kāi)啟過(guò)情況1:如果現(xiàn)在任務(wù)棧情況是BA谁撼,B位于棧頂,此時(shí)點(diǎn)擊B滋饲,那么不會(huì)創(chuàng)建新的實(shí)例厉碟,任務(wù)棧還是BA,回調(diào)onNewIntent方法屠缭。

之前開(kāi)啟過(guò)情況2:假如現(xiàn)在任務(wù)棧情況是CBA箍鼓,C為了棧頂,那么這時(shí)打開(kāi)B呵曹,因?yàn)锽是singleTask款咖,這時(shí)不會(huì)創(chuàng)建新的實(shí)例,但是肯定會(huì)把B置為棧頂(B在回到棧頂?shù)臅r(shí)候不是跳過(guò)去的奄喂,而是把自己上面的其他Activity全部干掉铐殃,這樣就只剩下自己和自己下面的Activity了),那么這時(shí)任務(wù)棧里面的情況就剩下 BA跨新,回調(diào)onNewIntent方法.

4 .singleInstance單一實(shí)例(單例)富腊,任務(wù)棧里面自已自己一個(gè)人

結(jié)論:當(dāng)啟動(dòng)一個(gè)啟動(dòng)模式為singleInstance的Activity時(shí)(之前沒(méi)啟動(dòng)過(guò)),這時(shí)系統(tǒng)將開(kāi)辟出另外一個(gè)任務(wù)棧域帐,用于存放這個(gè)Activity赘被,而且這個(gè)新的任務(wù)棧只能存放自身這唯一一個(gè)Activity是整。singleInstance頁(yè)面作為前臺(tái)任務(wù)打開(kāi)自己打開(kāi)自己,則復(fù)用民假,任務(wù)棧順序無(wú)變化贰盗;singleInstance頁(yè)面作為后臺(tái)任務(wù)棧,則切換成為前臺(tái)任務(wù)棧阳欲,無(wú)新實(shí)例產(chǎn)生舵盈,復(fù)用。

復(fù)用就會(huì)調(diào)用onNewIntent方法球化。

默認(rèn)的Activity都是standard模式的秽晚,那如果我們要把一個(gè)Activity指定為 singleTask 模式呢?

有兩種啟動(dòng)方法:一種方法是manifest指定筒愚,另外一種方式是代碼指定赴蝇。

manifest指定

//比如我們要指定為singleTask模式 manifest里面的Activity有個(gè) launchMode屬性來(lái)制定啟動(dòng)模式:
<activity android:name=".SecondActivity"
        android:launchMode="singleTask"/>

代碼指定intent.addFlag

//比如我們要指定為singleTop模式
Intent intent  = new Intent();
intent.setClass(FirstActivity.this,SecondActivity.class);
// 通過(guò)Intent的addFlag指定
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
5、啟動(dòng)一個(gè)Activity的幾種方式

在Android中我們可以通過(guò)下面兩種方式來(lái)啟動(dòng)一個(gè)新的Activity,注意這里是怎么啟動(dòng)巢掺,而非 啟動(dòng)模式>淞妗!分為顯示啟動(dòng)和隱式啟動(dòng)陆淀!

  1. 顯式啟動(dòng):
通過(guò)包名來(lái)啟動(dòng)考余,寫(xiě)法如下:
    ①最常見(jiàn)的:
    startActivity(new Intent(當(dāng)前Act.this,要啟動(dòng)的Act.class));
    ②通過(guò)Intent的ComponentName:
    ComponentName cn = new ComponentName("當(dāng)前Act的全限定類名","啟動(dòng)Act的全限定類名") ;
    Intent intent = new Intent() ;
    intent.setComponent(cn) ;
    startActivity(intent) ;
    ③初始化Intent時(shí)指定包名:
    Intent intent = new Intent("android.intent.action.MAIN");
    intent.setClassName("當(dāng)前Act的全限定類名","啟動(dòng)Act的全限定類名");
    startActivity(intent);

2.隱式啟動(dòng):

 // Intent-filter的Action,Category或data來(lái)實(shí)現(xiàn)
    <intent-filter>
        <action android:name="actionName" />
        <category android:name="categoryName" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
   //java代碼啟動(dòng)
        Intent intent = new Intent();
        intent.setAction("actionName");
        intent.addCategory("categoryName")
        startActivity(intent);
  1. 另外還有一個(gè)直接通過(guò)包名啟動(dòng)apk的:
Intent intent = getPackageManager().getLaunchIntentForPackage
    ("apk第一個(gè)啟動(dòng)的Activity的全限定類名") ;
 if  (intent != null) 
     startActivity(intent) ;
6、系統(tǒng)給我們提供的常見(jiàn)的Activity

好的轧苫,最后給大家附上一些系統(tǒng)給我們提供的一些常見(jiàn)的Activtiy吧楚堤!

//1.撥打電話
// 給移動(dòng)客服10086撥打電話
Uri uri = Uri.parse("tel:10086");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);

//2.發(fā)送短信
// 給10086發(fā)送內(nèi)容為“Hello”的短信
Uri uri = Uri.parse("smsto:10086");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "Hello");
startActivity(intent);

//3.發(fā)送彩信(相當(dāng)于發(fā)送帶附件的短信)
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra("sms_body", "Hello");
Uri uri = Uri.parse("content://media/external/images/media/23");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType("image/png");
startActivity(intent);

//4.打開(kāi)瀏覽器:
// 打開(kāi)Google主頁(yè)
Uri uri = Uri.parse("http://www.baidu.com");
Intent intent  = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

//5.發(fā)送電子郵件:(閹割了Google服務(wù)的沒(méi)戲!!!!)
// 給someone@domain.com發(fā)郵件
Uri uri = Uri.parse("mailto:someone@domain.com");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(intent);
// 給someone@domain.com發(fā)郵件發(fā)送內(nèi)容為“Hello”的郵件
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, "someone@domain.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("text/plain");
startActivity(intent);
// 給多人發(fā)郵件
Intent intent=new Intent(Intent.ACTION_SEND);
String[] tos = {"1@abc.com", "2@abc.com"}; // 收件人
String[] ccs = {"3@abc.com", "4@abc.com"}; // 抄送
String[] bccs = {"5@abc.com", "6@abc.com"}; // 密送
intent.putExtra(Intent.EXTRA_EMAIL, tos);
intent.putExtra(Intent.EXTRA_CC, ccs);
intent.putExtra(Intent.EXTRA_BCC, bccs);
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.setType("message/rfc822");
startActivity(intent);

//6.顯示地圖:
// 打開(kāi)Google地圖中國(guó)北京位置(北緯39.9,東經(jīng)116.3)
Uri uri = Uri.parse("geo:39.9,116.3");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

//7.路徑規(guī)劃
// 路徑規(guī)劃:從北京某地(北緯39.9含懊,東經(jīng)116.3)到上海某地(北緯31.2身冬,東經(jīng)121.4)
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=39.9 116.3&daddr=31.2 121.4");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

//8.多媒體播放:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/foo.mp3");
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);

//獲取SD卡下所有音頻文件,然后播放第一首=-= 
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

//9.打開(kāi)攝像頭拍照:
// 打開(kāi)拍照程序
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, 0);
// 取出照片數(shù)據(jù)
Bundle extras = intent.getExtras(); 
Bitmap bitmap = (Bitmap) extras.get("data");

//另一種:
//調(diào)用系統(tǒng)相機(jī)應(yīng)用程序,并存儲(chǔ)拍下來(lái)的照片
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
time = Calendar.getInstance().getTimeInMillis();
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
.getExternalStorageDirectory().getAbsolutePath()+"/tucue", time + ".jpg")));
startActivityForResult(intent, ACTIVITY_GET_CAMERA_IMAGE);

//10.獲取并剪切圖片
// 獲取并剪切圖片
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra("crop", "true"); // 開(kāi)啟剪切
intent.putExtra("aspectX", 1); // 剪切的寬高比為1:2
intent.putExtra("aspectY", 2);
intent.putExtra("outputX", 20); // 保存圖片的寬和高
intent.putExtra("outputY", 40); 
intent.putExtra("output", Uri.fromFile(new File("/mnt/sdcard/temp"))); // 保存路徑
intent.putExtra("outputFormat", "JPEG");// 返回格式
startActivityForResult(intent, 0);
// 剪切特定圖片
Intent intent = new Intent("com.android.camera.action.CROP"); 
intent.setClassName("com.android.camera", "com.android.camera.CropImage"); 
intent.setData(Uri.fromFile(new File("/mnt/sdcard/temp"))); 
intent.putExtra("outputX", 1); // 剪切的寬高比為1:2
intent.putExtra("outputY", 2);
intent.putExtra("aspectX", 20); // 保存圖片的寬和高
intent.putExtra("aspectY", 40);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true); 
intent.putExtra("output", Uri.parse("file:///mnt/sdcard/temp")); 
startActivityForResult(intent, 0);

//11.打開(kāi)Google Market 
// 打開(kāi)Google Market直接進(jìn)入該程序的詳細(xì)頁(yè)面
Uri uri = Uri.parse("market://details?id=" + "com.demo.app");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

//12.進(jìn)入手機(jī)設(shè)置界面:
// 進(jìn)入無(wú)線網(wǎng)絡(luò)設(shè)置界面(其它可以舉一反三)  
Intent intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);  
startActivityForResult(intent, 0);

//13.安裝apk:
Uri installUri = Uri.fromParts("package", "xxx", null);   
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

//14.卸載apk:
Uri uri = Uri.fromParts("package", strPackageName, null);      
Intent it = new Intent(Intent.ACTION_DELETE, uri);      
startActivity(it); 

//15.發(fā)送附件:
Intent it = new Intent(Intent.ACTION_SEND);      
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");      
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");      
sendIntent.setType("audio/mp3");      
startActivity(Intent.createChooser(it, "Choose Email Client"));

//16.進(jìn)入聯(lián)系人頁(yè)面:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(People.CONTENT_URI);
startActivity(intent);

//17.查看指定聯(lián)系人:
Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.id);//info.id聯(lián)系人ID
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(personUri);
startActivity(intent);

參考:(http://www.runoob.com/w3cnote/android-tutorial-activity.html
寫(xiě)在最后: 本系列的文章旨在學(xué)習(xí)過(guò)程中的總結(jié)岔乔,如果對(duì)你也有幫助酥筝,榮幸之至。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雏门,一起剝皮案震驚了整個(gè)濱河市嘿歌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剿配,老刑警劉巖搅幅,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呼胚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)息裸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蝇更,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沪编,“玉大人,你說(shuō)我怎么就攤上這事年扩∫侠” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵厨幻,是天一觀的道長(zhǎng)相嵌。 經(jīng)常有香客問(wèn)我,道長(zhǎng)况脆,這世上最難降的妖魔是什么饭宾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮格了,結(jié)果婚禮上看铆,老公的妹妹穿的比我還像新娘。我一直安慰自己盛末,他們只是感情好弹惦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著悄但,像睡著了一般棠隐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上檐嚣,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天宵荒,我揣著相機(jī)與錄音,去河邊找鬼净嘀。 笑死报咳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挖藏。 我是一名探鬼主播暑刃,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼膜眠!你這毒婦竟也來(lái)了岩臣?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宵膨,失蹤者是張志新(化名)和其女友劉穎架谎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辟躏,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谷扣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片会涎。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裹匙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出末秃,到底是詐尸還是另有隱情概页,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布练慕,位于F島的核電站惰匙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铃将。R本人自食惡果不足惜项鬼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望麸塞。 院中可真熱鬧秃臣,春花似錦、人聲如沸哪工。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雁比。三九已至稚虎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間偎捎,已是汗流浹背蠢终。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茴她,地道東北人寻拂。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像丈牢,于是被迫代替她去往敵國(guó)和親祭钉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一己沛,前言 有時(shí)候會(huì)有這樣的需求慌核,例如,一個(gè)閱讀app申尼,主界面(Activity A)是一個(gè)顯示各種小說(shuō)的列表垮卓,我們...
    走在路上的日子閱讀 528評(píng)論 0 0
  • 一、生命周期 onCreate():當(dāng)activity被創(chuàng)建時(shí)調(diào)用师幕,在這里主要做一些初始化的操作粟按,如設(shè)置布局、初始...
    crush_d872閱讀 368評(píng)論 0 0
  • 七月中旬正式進(jìn)入公司,八月初正式開(kāi)始接觸android钾怔。三個(gè)多月以來(lái)碱呼,一直沒(méi)些什么東西蒙挑,這一篇是首秀宗侦,后面還會(huì)陸續(xù)...
    白板x閱讀 253評(píng)論 0 0
  • Activity 是一個(gè)應(yīng)用組件,用戶可與其提供的屏幕進(jìn)行交互忆蚀,以執(zhí)行撥打電話矾利、拍攝照片、發(fā)送電子郵件或查看地圖等...
    岳小川閱讀 482評(píng)論 0 3
  • 1馋袜、正常情況下的生命周期主要涉及四個(gè)場(chǎng)景 (1)Activity啟動(dòng)時(shí) onCreate():可以做一些初始化操作...
    Samuel_Tom閱讀 572評(píng)論 0 0