欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

顯式和隱式Intent-創(chuàng)新互聯(lián)

Intent分兩種: 顯式(Explicit intent)和隱式(Implicit intent)

創(chuàng)新互聯(lián)長期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為敦化企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都做網(wǎng)站,敦化網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

一、顯式(設(shè)置Component)

顯式,即直接指定需要打開的activity對應(yīng)的類。 以下多種方式都是一樣的,實際上都是設(shè)置Component直接指定Activity類的顯式Intent,由MainActivity跳轉(zhuǎn)到SecondActivity:

1、構(gòu)造方法傳入Component,最常用的方式

Intent intent = new Intent(this, SecondActivity.class);  
startActivity(intent);


2、setComponent方法

顯式和隱式Intent

ComponentName componentName = new ComponentName(this, SecondActivity.class);  
// 或者ComponentName componentName = new ComponentName(this, "com.example.app016.SecondActivity");  
// 或者ComponentName componentName = new ComponentName(this.getPackageName(), "com.example.app016.SecondActivity");    Intent intent = new Intent();  
intent.setComponent(componentName);  
startActivity(intent);

顯式和隱式Intent


3、setClass/setClassName方法

顯式和隱式Intent

Intent intent = new Intent();  
  
intent.setClass(this, SecondActivity.class);  
// 或者intent.setClassName(this, "com.example.app016.SecondActivity");  
// 或者intent.setClassName(this.getPackageName(), "com.example.app016.SecondActivity");            startActivity(intent);

顯式和隱式Intent

顯式Intent通過Component可以直接設(shè)置需要調(diào)用的Activity類,可以唯一確定一個Activity,意圖特別明確,所以是顯式的。設(shè)置這個類的方式可以是Class對象(如SecondActivity.class),

也可以是包名加類名的字符串(如"com.example.app016.SecondActivity")。這個很好理解,在應(yīng)用程序內(nèi)部跳轉(zhuǎn)界面常用這種方式。

 

二、隱式

隱式,即不是像顯式的那樣直接指定需要調(diào)用的Activity,隱式不明確指定啟動哪個Activity,而是設(shè)置Action、Data、Category,讓系統(tǒng)來篩選出合適的Activity。

篩選是根據(jù)所有的<intent-filter>來篩選。

下面以Action為例:

AndroidManifest.xml文件中,首先被調(diào)用的Activity要有一個帶有<intent-filter>并且包含<action>的Activity,設(shè)定它能處理的Intent,并且category設(shè)為"android.intent.category.DEFAULT"。

action的name是一個字符串,可以自定義,例如我在這里設(shè)成"abcdefg":

顯式和隱式Intent

<activity  
    android:name="com.example.app016.SecondActivity">  
    <intent-filter>  
        <action android:name="abcdefg"/>  
        <category android:name="android.intent.category.DEFAULT"/>  
    </intent-filter>  
</activity>

顯式和隱式Intent


然后,在MainActivity,才可以通過這個action name找到上面的Activity。

下面兩種方式分別通過setAction和構(gòu)造方法方法設(shè)置Action,兩種方式效果相同。

1、setAction方法

Intent intent = new Intent();  
intent.setAction("abcdefg");  
startActivity(intent);


2、構(gòu)造方法直接設(shè)置Action

Intent intent = new Intent("abcdefg");  
startActivity(intent);


通過設(shè)置Action字符串,表明自己的意圖,即我想干嘛,需要由系統(tǒng)解析,找到能夠處理這個Intent的Activity并啟動。

比如我想打電話,則可以設(shè)置Action為"android.intent.action.DIAL"字符串,表示打電話的意圖,系統(tǒng)會找到能處理這個意圖的Activity,例如調(diào)出撥號面板。

 

有幾點需要注意: 

1、 這個Activity其他應(yīng)用程序也可以調(diào)用,只要使用這個Action字符串。這樣應(yīng)用程序之間交互就很容易了,例如手機QQ可以調(diào)用QQ空間,可以調(diào)用騰訊微博等。 

因為如此,為了防止應(yīng)用程序之間互相影響,一般命名方式是包名+Action名,例如這里命名"abcdefg"就很不合理了,就應(yīng)該改成"com.example.app016.MyTest"。

2、 當(dāng)然,你可以在自己的程序中調(diào)用其他程序的Action。 例如可以在自己的應(yīng)用程序中調(diào)用撥號面板:

Intent intent = new Intent(Intent.ACTION_DIAL);  
// 或者Intent intent = new Intent("android.intent.action.DIAL");  
// Intent.ACTION_DIAL是內(nèi)置常量,值為"android.intent.action.DIAL"  startActivity(intent);

 

顯式和隱式Intent

3、一個Activity可以處理多種Action 只要你的應(yīng)用程序夠牛逼,一個Activity可以看網(wǎng)頁,打電話,發(fā)短信,發(fā)郵件。。。當(dāng)然可以。 Intent的Action只要是其中之一,就可以打開這個Activity。

 

顯式和隱式Intent

activity  
    android:name="com.example.app016.SecondActivity">  
    <intent-filter>  
        <!-- 可以處理下面三種Intent -->  
        <action android:name="com.example.app016.SEND_EMAIL"/>  
        <action android:name="com.example.app016.SEND_MESSAGE"/>  
        <action android:name="com.example.app016.DAIL"/>  
        <category android:name="android.intent.category.DEFAULT" />  
    </intent-filter>  
</activity>

顯式和隱式Intent


對于一個Action字符串,系統(tǒng)有可能會找到一個Activity能處理這個Action,也有可能找到多個Activity,也可能一個都找不到。
1、找到一個Activity
很簡單,直接打開這個Activity。這個不需要解釋。
2、找到多個Acyivity
系統(tǒng)會提示從多個activity中選擇一個打開。
例如我們自己開發(fā)一個撥號面板應(yīng)用程序,可以設(shè)置activity的<intent-filter>中Action name為"android.intent.action.DIAL",這樣別的程序調(diào)用撥號器時,

用戶可以從Android自帶的撥號器和我們自己開發(fā)的撥號器中選擇。

顯式和隱式Intent

<activity  
    android:name="com.example.app016.SecondActivity">  
    <intent-filter>  
        <action android:name="android.intent.action.DIAL"/>  
        <category android:name="android.intent.category.DEFAULT" />  
    </intent-filter>  
</activity>

顯式和隱式Intent

 

顯式和隱式Intent
這也就是當(dāng)Android手機裝上UC瀏覽器后,打開網(wǎng)頁時會彈出選擇Android自帶瀏覽器還是UC瀏覽器,可能都會遇到過。
3、一個Activity都沒找到
一個都沒找到的話,程序就會出錯,會拋出ActivityNotFoundException。比如隨便寫一個action字符串:

Intent intent = new Intent("asasasas");  
startActivity(intent);


顯式和隱式Intent

所以應(yīng)該注意try catch異常。

顯式和隱式Intent

Intent intent = new Intent("asasasas");  
try  {  
    startActivity(intent);  
}  
catch(ActivityNotFoundException e)  
{  
    Toast.makeText(this, "找不到對應(yīng)的Activity", Toast.LENGTH_SHORT).show();  
}

顯式和隱式Intent


或者也可以使用Intent的resolveActivity方法判斷這個Intent是否能找到合適的Activity,如果沒有,則不再startActivity,或者可以直接禁用用戶操作的控件。

Intent intent = new Intent(Intent.ACTION_DIAL);  
if(intent.resolveActivity(getPackageManager()) == null)  
{  
    // 設(shè)置控件不可用  }


注意resolveActivity方法返回值就是顯式Intent上面講到的ComponentName對象,一般情況下也就是系統(tǒng)找到的那個Activity。

但是如果有多個Activity可供選擇的話,則返回的Component是com.android.internal.app.ResolverActivity,也就是用戶選擇Activity的那個界面對應(yīng)的Activity,這里不再深究。

顯式和隱式Intent

Intent intent = new Intent(Intent.ACTION_DIAL);  
ComponentName componentName = intent.resolveActivity(getPackageManager());  
if(componentName != null)  
{  
    String className = componentName.getClassName();  
    Toast.makeText(this, className, Toast.LENGTH_SHORT).show();  
}

顯式和隱式Intent

轉(zhuǎn)自https://www.cnblogs.com/liaojie970/p/5827433.html 

分享文章:顯式和隱式Intent-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://www.chinadenli.net/article16/dccogg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化小程序開發(fā)移動網(wǎng)站建設(shè)網(wǎng)站改版用戶體驗響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化