顯式Intent和隱式Intent解析

顯式Intent和隱式Intent解析

Android中的Intent分為兩種類型:

  • 顯式 Intent:按名稱(完全限定類名)指定要啟動(dòng)的組件。 通常,您會(huì)在自己的應(yīng)用中使用顯式 Intent 來(lái)啟動(dòng)組件萄传,這是因?yàn)槟酪獑?dòng)的 Activity 或服務(wù)的類名枫吧。例如躺苦,啟動(dòng)新 Activity 以響應(yīng)用戶操作,或者啟動(dòng)服務(wù)以在后臺(tái)下載文件诗越。

  • 隱式 Intent :不會(huì)指定特定的組件,而是聲明要執(zhí)行的常規(guī)操作息堂,從而允許其他應(yīng)用中的組件來(lái)處理它嚷狞。 例如,如需在地圖上向用戶顯示位置荣堰,則可以使用隱式 Intent床未,請(qǐng)求另一具有此功能的應(yīng)用在地圖上顯示指定的位置。

顯示Intent啟動(dòng)當(dāng)前應(yīng)用組件

顯式Intent一般是在當(dāng)前應(yīng)用中調(diào)用振坚,用來(lái)啟動(dòng)當(dāng)前應(yīng)用的指定組件薇搁。下面展示了幾種常見的顯式Intent啟動(dòng)實(shí)例:

// 顯式Intent調(diào)用——構(gòu)造方法傳入Component
Intent intent = new Intent(this, TestActivity.class);
startActivity(intent);
// 顯式Intent調(diào)用——setComponent
ComponentName componentName = new ComponentName(this, TestActivity.class);
Intent intent = new Intent();
intent.setComponent(componentName);
startActivity(intent);
// 顯式Intent調(diào)用——setClass
Intent intent = new Intent();
intent.setClass(this, TestActivity.class);
startActivity(intent);
// 顯式Intent調(diào)用——setClassName(packageContext, className)
Intent intent = new Intent();
//context, String
intent.setClassName(this, "com.tiny.demo.firstlinecode.test.view.TestActivity");
startActivity(intent);
// 顯式Intent調(diào)用——setClassName(packageName, className)
Intent intent = new Intent();
//String, String
intent.setClassName("com.tiny.demo.firstlinecode", "com.tiny.demo.firstlinecode.test.view.TestActivity");
startActivity(intent);

顯示Intent啟動(dòng)其他應(yīng)用組件

先看下錯(cuò)誤示范:
目標(biāo)Activity配置:不做任何額外配置。

<activity
    android:name=".TestExplicitIntentActivity"
    android:label="TestExplicitIntentActivity" />
// 啟動(dòng)其他應(yīng)用的Activity屡拨,目標(biāo)Activity不做任何配置只酥,會(huì)報(bào)SecurityException錯(cuò)誤
Intent intent = new Intent();
//String, String
intent.setClassName("com.tinytongtong.dividerviewdemo", "com.tinytongtong.dividerviewdemo.TestExplicitIntentActivity");
startActivity(intent);

具體錯(cuò)誤如下:

2019-08-06 10:02:23.355 7230-7230/com.tiny.demo.firstlinecode E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.tiny.demo.firstlinecode, PID: 7230
    java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.tinytongtong.dividerviewdemo/.TestExplicitIntentActivity } from ProcessRecord{2fe990c 7230:com.tiny.demo.firstlinecode/u0a397} (pid=7230, uid=10397) not exported from uid 10398
        ...
     Caused by: android.os.RemoteException: Remote stack trace:
        at com.android.server.am.ActivityStackSupervisor.checkStartAnyActivityPermission(Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/String;IIILjava/lang/String;ZZLcom/android/server/am/ProcessRecord;Lcom/android/server/am/ActivityRecord;Lcom/android/server/am/ActivityStack;)Z(libmapleservices.so:4243605)
        ...

這個(gè)SecurityException異常是完全可以避免的褥实,我們給目標(biāo)Activity設(shè)置android:exported="true"屬性。

<activity
    android:name=".TestExplicitIntentActivity"
    android:exported="true"
    android:label="TestExplicitIntentActivity" />

然后再運(yùn)行裂允,就成功打開目標(biāo)Activity了损离。

當(dāng)然了,我們還有另一種方式打開其他應(yīng)用的Activity绝编,我們需要給目標(biāo)Activity設(shè)置一個(gè)不相關(guān)的<intent-filter>僻澎。具體配置如下:

<activity
    android:name=".TestExplicitIntent1Activity"
    android:label="TestExplicitIntent1Activity">
    <intent-filter>
        <action android:name="com.tinytongtong.dividerviewdemo.action.TestExplicitIntent1Activity" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="com.tinytongtong.dividerviewdemo.category.TestExplicitIntent1Activity" />

        <data
            android:host="www.tiny.com"
            android:mimeType="text/plain"
            android:port="8080"
            android:scheme="http" />
    </intent-filter>
</activity>

啟動(dòng)代碼:

// 啟動(dòng)其他應(yīng)用的Activity,目標(biāo)Activity需要設(shè)置一個(gè)不相關(guān)的Intent-Filter
Intent intent = new Intent();
//String, String
intent.setClassName("com.tinytongtong.dividerviewdemo", "com.tinytongtong.dividerviewdemo.TestExplicitIntent1Activity");
startActivity(intent);

說(shuō)了這么多十饥,其實(shí)就是為了證明顯式Intent是可以啟動(dòng)其他應(yīng)用的Activity的窟勃。

官方是不推薦使用顯式Intent啟動(dòng)其他應(yīng)用的Activity的,我們一般也不會(huì)這么寫逗堵。因?yàn)槲覀儐?dòng)使用的Intent#setClassName方法的兩個(gè)參數(shù)均是String類型秉氧,目標(biāo)應(yīng)用的包名和目標(biāo)應(yīng)用的全路徑都是以String類型體現(xiàn)的,這就是我們應(yīng)該盡力避免的硬編碼了蜒秤。一旦目標(biāo)Activity修改了類名汁咏、修改了包名或者移動(dòng)了位置,那么我們之前寫的啟動(dòng)代碼都會(huì)失敗作媚,這明顯不符合我們的代碼規(guī)范攘滩。

Intent#setClassName源碼:

public @NonNull Intent setClassName(@NonNull String packageName, @NonNull String className) {
    mComponent = new ComponentName(packageName, className);
    return this;
}

所以說(shuō),啟動(dòng)其他應(yīng)用的組件時(shí)纸泡,應(yīng)該使用隱式Intent漂问,具體來(lái)說(shuō)就是使用Intent-Filter進(jìn)行匹配。

隱式Intent啟動(dòng)實(shí)例

隱式Intent不會(huì)指定特定的組件女揭,而是聲明要執(zhí)行的常規(guī)操作蚤假,系統(tǒng)會(huì)根據(jù)Intent的內(nèi)容去匹配對(duì)應(yīng)的Activity并啟動(dòng)。

官網(wǎng)上是這么介紹的:

創(chuàng)建隱式 Intent 時(shí)田绑,Android 系統(tǒng)通過(guò)將 Intent 的內(nèi)容與在設(shè)備上其他應(yīng)用的清單文件中聲明的 Intent-Filter 進(jìn)行比較勤哗,從而找到要啟動(dòng)的相應(yīng)組件。 如果 Intent 與 Intent-Filter 匹配掩驱,則系統(tǒng)將啟動(dòng)該組件芒划,并向其傳遞 Intent 對(duì)象。 如果多個(gè) Intent 過(guò)濾器兼容欧穴,則系統(tǒng)會(huì)顯示一個(gè)對(duì)話框民逼,支持用戶選取要使用的應(yīng)用。

所以說(shuō)隱式Intent既可以啟動(dòng)當(dāng)前應(yīng)用的組件涮帘,也可以啟動(dòng)其他應(yīng)用的組件拼苍。下面會(huì)給出兩個(gè)最簡(jiǎn)單的隱式Intent啟動(dòng)Activity實(shí)例。

1调缨、啟動(dòng)當(dāng)前應(yīng)用組件的示例如下:
目標(biāo)activity配置:

<activity android:name=".kfysts.chapter01.intent.implicit.ImplicitIntentTestAActivity">
    <intent-filter>
        <action android:name="com.tiny.demo.firstlinecode.kfysts.chapter01.intent.implicit.action.a" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Intent代碼:

// 啟動(dòng)當(dāng)前應(yīng)用的Activity
Intent intent = new Intent();
//action
intent.setAction("com.tiny.demo.firstlinecode.kfysts.chapter01.intent.implicit.action.a");
//Category可以不設(shè)置疮鲫,因?yàn)橐话阍贏ndroidManifest.xml會(huì)設(shè)置Default吆你,startActivity方法中也會(huì)默認(rèn)添加Default。
if (intent.resolveActivity(getPackageManager()) != null) {
    LogUtils.e("match success");
    startActivity(intent);
} else {
    LogUtils.e("match failure");
}

2俊犯、啟動(dòng)其他應(yīng)用組件的示例如下:
目標(biāo)activity配置(其他應(yīng)用):

<activity
    android:name=".TestImplicitIntentActivity"
    android:label="TestImplicitIntentActivity">
    <intent-filter>
        <action android:name="com.tinytongtong.dividerviewdemo.action.a" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Intent代碼:

// 啟動(dòng)其他應(yīng)用的Activity
Intent intent = new Intent();
//action
intent.setAction("com.tinytongtong.dividerviewdemo.action.a");
//Category可以不設(shè)置妇多,因?yàn)橐话阍贏ndroidManifest.xml會(huì)設(shè)置Default,startActivity方法中也會(huì)默認(rèn)添加Default燕侠。
if (intent.resolveActivity(getPackageManager()) != null) {
    LogUtils.e("match success");
    startActivity(intent);
} else {
    LogUtils.e("match failure");
}

IntentFilter匹配規(guī)則

隱式Intent調(diào)用分為兩部分者祖,一部分是AndroidManifest中組件的<intent-filter>配置,一部分是Intent對(duì)象的構(gòu)建绢彤。

只有當(dāng)我們構(gòu)建的Intent對(duì)象符合目標(biāo)組件的<intent-filter>配置的時(shí)候七问,才能成功啟動(dòng)目標(biāo)組件。

那么如何才能匹配上<intent-filter>的配置呢茫舶?這個(gè)就是我們要說(shuō)的IntentFilter的匹配規(guī)則械巡。

<intent-filter>中的過(guò)濾信息有三種,分別是action奇适、category坟比、data。下面是一個(gè)過(guò)濾規(guī)則的實(shí)例:

<activity
    android:name=".IActivity"
    android:label="IActivity"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name=“com.tinytongtong.dividerviewdemo.action.11" />
        <action android:name=“com.tinytongtong.dividerviewdemo.action.22" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name=“com.tinytongtong.dividerviewdemo.category.11" />
        <data
            android:host="www.tiny.com"
            android:mimeType="text/plain"
            android:port="8080"
            android:scheme="http" />
    </intent-filter>
</activity>

匹配規(guī)則

為了匹配過(guò)濾列表嚷往,需要同時(shí)匹配過(guò)濾列表中的action、category柠衅、data信息皮仁,否則匹配失敗。

一個(gè)過(guò)濾列表中的action菲宴、category和data可以有多個(gè)贷祈,所有的action、category喝峦、data分別構(gòu)成不同類別势誊,同一類別的信息共同約束當(dāng)前類別的匹配過(guò)程。

只有一個(gè)Intent同時(shí)匹配action谣蠢、category粟耻、data才算完全匹配,只有完全匹配才能成功啟動(dòng)Activity眉踱。

另外一點(diǎn)挤忙,一個(gè)activity中可以有多個(gè)intent-filter,一個(gè)Intent只要能匹配任何一組Intent-filter即可成功啟動(dòng)對(duì)應(yīng)的activity谈喳。

action

action是一個(gè)字符串册烈,該字符串區(qū)分大小寫。系統(tǒng)預(yù)定義了一些action婿禽,同時(shí)我們也可以在應(yīng)用中定義自己的action赏僧。

一個(gè)<intent-filter>中可以有多個(gè)action大猛,此時(shí)Intent中的action能夠和<intent-filter>中的任何一個(gè)action相同即可匹配成功。

另外淀零,<intent-filter>中的action和Intent中的action都是必須的挽绩,就是說(shuō)<intent-filter>中至少指定一個(gè)action,同理Intent中也必須設(shè)置action窑滞,否則就沒有任何意義了琼牧。

category

category也是一個(gè)字符串,也區(qū)分大小寫哀卫。系統(tǒng)預(yù)定義了一些category巨坊,同時(shí)我們也可以在應(yīng)用中定義自己的category。

我們一般說(shuō)category有默認(rèn)值此改,是由于系統(tǒng)在調(diào)用startActivity或者startActivityForResult的時(shí)候會(huì)默認(rèn)為Intent加上“android.intent.category.DEFAULT”這個(gè)category趾撵。

因此,我們的<intent-filter>配置中必須添加對(duì)應(yīng)的配置共啃,不然會(huì)匹配失敗占调。

<intent-filter>
    ...
    <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

Intent中我們可以不設(shè)置category,因?yàn)橄到y(tǒng)默認(rèn)給我們添加了“android.intent.category.DEFAULT”移剪。如果我們要添加category的話究珊,這個(gè)category就必須跟</intent-filter>的任意一個(gè)匹配,否則會(huì)匹配失敗纵苛。

data
data語(yǔ)法

data語(yǔ)法如下所示:

<data android:scheme="string"

      android:host="string"

      android:port="string"

      android:path="string"

      android:pathPattern="string"

      android:pathPrefix="string"

      android:mimeType="string" />

data由兩部分組成剿涮,mimeType和URI。
mimeType指媒體類型攻人,比如image/jpeg取试、audio/mpeg4-genericvideo/*等,可以表示圖片怀吻、文本瞬浓、視頻等不同的媒體格式。

URI包含的數(shù)據(jù)比較多蓬坡,結(jié)構(gòu)如下所示:

<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]

具體示例如下所示:

content://com.example.project:200/folder/subfolder/etc
http://www.baidu.com:80/search/info

接下來(lái)介紹每一個(gè)數(shù)據(jù)的含義:

①android:scheme
URI的模式猿棉,比如http、file渣窜、content等铺根。如果URI中沒有指定scheme,那么整個(gè)URI的其他參數(shù)無(wú)效乔宿,這也意味著URI是無(wú)效的位迂。

②android:host
URI的主機(jī)名,比如www.baidu.com。如果host未指定掂林,那么整個(gè)URI中的其他參數(shù)無(wú)效臣缀,這也意味著URI是無(wú)效的。

③Android:port
URI中的端口號(hào)泻帮,比如80精置,僅當(dāng)URI中指定了scheme和host參數(shù)的時(shí)候port參數(shù)才是有意義的。

④android:path锣杂、android:pathPrefix脂倦、android:pathPattern
這三個(gè)參數(shù)表述路徑信息,其中path表示完整的路徑信息元莫;
pathPrefix表示路徑的前綴信息赖阻;
pathPattern也表示完整的路徑信息,但是它里面可以包含通配符“*”踱蠢,“*”表示0個(gè)或多個(gè)任意字符火欧,需要注意的事,由于正則表達(dá)式的規(guī)范茎截,如果想表示真實(shí)的字符串苇侵,那么“*”要寫成“\\*”“\”要寫成“\\\\”企锌。

另外榆浓,data有兩種特殊寫法:下面兩種寫法是等價(jià)的。

<intent-filter . . . >
    <data android:scheme="something" android:host="project.example.com" />
    . . .
</intent-filter>
<intent-filter . . . >
    <data android:scheme="something" />
    <data android:host="project.example.com" />
    . . .
</intent-filter>
data的匹配規(guī)則

data是非必須的撕攒,可以不設(shè)置哀军。但是如果在</intent-filter>定義了data,那么Intent中也必須設(shè)置可匹配的data打却。

再來(lái)看看data內(nèi)部:

</intent-filter>的URI有默認(rèn)值file和content,如果設(shè)置了URI谎倔,則默認(rèn)值就失效柳击。

</intent-filter>的mimeType可以不設(shè)置。

data的匹配意味著mimeType和URI同時(shí)匹配片习。

綜合以上所有情況捌肴,這里分幾種情況:

①data中只配置了mimeType:

<intent-filter>
    ...
    <data android:mimeType="image/*" />
</intent-filter>

由于這里只配置了mimeType,所以會(huì)使用默認(rèn)的URI藕咏,默認(rèn)的URI的scheme為file或content状知。

所以使用下面這兩段代碼可以匹配:

intent.setDataAndType(Uri.parse("content://maolegemi"), "image/jpeg");
// 下面這段在api大于24的版本上會(huì)報(bào)錯(cuò)FileUriExposedException,需要將file替換為content
intent.setDataAndType(Uri.parse("file://maolegemi"), "image/jpeg");

②data中只配置了URI:

<intent-filter>
    ...
    <data
        android:host="www.tiny.com"
        android:port="8080"
        android:scheme="http" />
</intent-filter>

對(duì)應(yīng)匹配代碼如下:

intent.setDataAndType(Uri.parse("http://www.tiny.com:8080/abcdefg"), null);

③data中同時(shí)配置了mimeType和URI:

<intent-filter>
    ...
    <data
        android:host="www.tiny.com"
        android:port="8080"
        android:mimeType="text/plain"
        android:scheme="http" />
</intent-filter>

對(duì)應(yīng)的匹配代碼如下:

intent.setDataAndType(Uri.parse("http://www.tiny.com:8080/abcdefg"), "text/plain");

總結(jié)

綜上所述孽查,對(duì)<intent-filter>而言饥悴,必不可少的配置是<cation>和默認(rèn)的category。

對(duì)Intent而言,必不可少的是action西设,因?yàn)槟J(rèn)的category會(huì)添加瓣铣。

如果<intent-filter>定義了data,不管mimeType是否設(shè)置贷揽,Intent中都必須設(shè)置uri棠笑,因?yàn)閡ri有默認(rèn)值。

參考

Android開發(fā)藝術(shù)探索

https://developer.android.com/guide/components/intents-filters?hl=zh-cn

https://developer.android.com/guide/topics/manifest/data-element

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末禽绪,一起剝皮案震驚了整個(gè)濱河市蓖救,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌印屁,老刑警劉巖循捺,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異库车,居然都是意外死亡巨柒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門柠衍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)洋满,“玉大人,你說(shuō)我怎么就攤上這事珍坊∥矗” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵阵漏,是天一觀的道長(zhǎng)驻民。 經(jīng)常有香客問(wèn)我,道長(zhǎng)履怯,這世上最難降的妖魔是什么回还? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮叹洲,結(jié)果婚禮上柠硕,老公的妹妹穿的比我還像新娘。我一直安慰自己运提,他們只是感情好蝗柔,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著民泵,像睡著了一般癣丧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上栈妆,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天胁编,我揣著相機(jī)與錄音厢钧,去河邊找鬼。 笑死掏呼,一個(gè)胖子當(dāng)著我的面吹牛坏快,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播憎夷,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼莽鸿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拾给?” 一聲冷哼從身側(cè)響起祥得,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒋得,沒想到半個(gè)月后级及,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡额衙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年饮焦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窍侧。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡县踢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伟件,到底是詐尸還是另有隱情硼啤,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布斧账,位于F島的核電站谴返,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏咧织。R本人自食惡果不足惜嗓袱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望习绢。 院中可真熱鬧索抓,春花似錦、人聲如沸毯炮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桃煎。三九已至,卻和暖如春大刊,著一層夾襖步出監(jiān)牢的瞬間为迈,已是汗流浹背三椿。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葫辐,地道東北人搜锰。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像耿战,于是被迫代替她去往敵國(guó)和親蛋叼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • Intent組件雖然不是四大組件剂陡,但卻是連接四大組件的橋梁狈涮,學(xué)習(xí)好這個(gè)知識(shí),也非常的重要鸭栖。 一歌馍、什么是Intent...
    困惑困惑困惑閱讀 1,496評(píng)論 0 0
  • 什么是Intent intent是一個(gè)消息傳遞對(duì)象,可以使用它從其他應(yīng)用組件請(qǐng)求操作晕鹊。通常我們用intent來(lái)啟動(dòng)...
    dony_east閱讀 823評(píng)論 0 3
  • 1.Intent的用法: (1)Action跳轉(zhuǎn) 1松却、 使用Action跳轉(zhuǎn),當(dāng)程序AndroidManifest...
    彭文波_4118閱讀 5,706評(píng)論 0 7
  • 今天在餐館吃飯溅话,有一道菜是砂鍋豆腐晓锻。菜來(lái)了,從盆里往外端公荧,竟然燙手带射,兩個(gè)食指燙著了。趕緊用水沖沖循狰,然后問(wèn)服務(wù)員:燙...
    金明啊閱讀 224評(píng)論 0 0
  • 從開始寫簡(jiǎn)書以來(lái)窟社,除了寫作,日子變得散漫绪钥,毫無(wú)計(jì)劃灿里。雖然有時(shí)我也很努力,看起來(lái)很努力程腹,每天忙忙碌碌匣吊,但沒有整體規(guī)劃...
    逆風(fēng)飛揚(yáng)你的笑閱讀 2,434評(píng)論 24 110