android命令行終端,Android Intent常用方法詳細介紹,顯示Intent,隱式Intent,調用瀏覽器,撥號,發短信,傳遞數據

 2023-11-18 阅读 22 评论 0

摘要:Intent介紹 Intent是Android程序中各個組件之間進行交互的一種重要方式,它不僅可以指明當前組件想要執行的動作,還可以在不同組件之間傳遞數據。Intent一般用于啟動活動,啟動服務以及發送廣播等場景。Intent大致可以分為兩種,顯示Intent和隱式Int

Intent介紹

Intent是Android程序中各個組件之間進行交互的一種重要方式,它不僅可以指明當前組件想要執行的動作,還可以在不同組件之間傳遞數據。Intent一般用于啟動活動,啟動服務以及發送廣播等場景。Intent大致可以分為兩種,顯示Intent和隱式Intent。Intent有多個構造函數的重載,其中最常用的一個是Intent(Context packageContext,Class<?> cls),這個構造函數接收兩個參數,第一個是提供啟動活動的上下文,第二個是想要啟動的目標活動。

顯示Intent

顯示Intent的使用就是用“Intent介紹”中提到的最常用的Intent構造方法。因為這種“意圖”非常的明顯,所以叫它顯示Intent。

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

隱式Intent?

與顯示Intent相比,隱式Intent就沒有明確的指出要啟動那一個活動,而是指定了一系列更為抽象的action和category等信息,然后交給系統去分析這個Intent,找出匹配action和category的活動并啟動。在AndroidManifest.xml中的<activity>標簽下的<intent-filter>中指定當前活動能夠響應的action和category。

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

在action標簽中,指定了該Activity可以響應com.example.activitytest.ACTION_START這個action,而category標簽則包含了一些附加信息,更精確的指明了當前活動能夠相應的Intent還可能帶有的category。只有action和category兩個標簽中的內容同時匹配,這個活動才能響應該Intent。使用Intent的另一個構造函數指定需要響應的action。

Intent intent = new Intent("com.example.activitytest.ACTION_START");

這樣就可以啟動添加了該action的SecondActivity了。上面不是說要同時匹配action和category嗎?怎么這里只有action?在SecondActivity中添加的category是一種默認的category,在調用startActivity()方法時,會自動將這個category添加到該Intent中。如果有自定義的category,使用以下方法添加:?

intent.addCategory("com.example.activitytest.MY_CATEGORY");

android命令行終端?添加自定義的category時,需要注意,如果沒有任何一個活動匹配該category,當程序執行到該Intent時,程序會崩潰。?

Intent更多的隱式用法?

1.調用系統瀏覽器?

首先指定Intent的action為“Intent.ACTION_VIEW”,這是一個android系統的內置動作,其常量值為android.intent.action.VIEW。然后他通過Uri.parse()方法,將一個網址字符串解析成一個Uri對象。最后調用Intent的setData()方法將這個Uri對象傳遞進去。

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

2.調用撥號界面?

首先指定Intent的action為“Intent.ACTION_DIAL”,這又是一個android系統的內置動作,然后在data部分指定協議為tel,號碼為10086。

Intent intent = new Intent("Intent.ACTION_DIAL");
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

?3.直接撥打電話

和Intent調用撥號盤一樣,也是setAction(),然后setData(),只是Action,替換為“Intent.ACTION_CALL”。注意:使用“Intent.ACTION_CALL”是,需要在AndroidManifest.xml文件中添加撥號權限。

權限:

    <uses-permission android:name="android.permission.CALL_PHONE" />

?代碼:

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

4.發送短信

android讀取短信。?發送短信和撥打電話是一樣的,只是Action和需要申請的權限不同。直接發送短信的Action為:Intent.ACTION_SENDTO。同時要需要調用putExtra()方法添加短信內容

權限:

    <uses-permission android:name="android.permission.SEND_SMS"/>

?代碼:

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:10086"));
//sms_body固定參數,代表短信內容
//發送短信內容為:"《致命魔術》賊好看。"
intent.putExtra("sms_body","《致命魔術》賊好看。");
startActivity(intent);

向下一個活動傳遞數據?

Intent中提供了一系列putExtra()方法的重載,可以把我們想要傳遞的數據暫存在Intent中,啟動了另一個活動后,只需要把這些數據再從Intent中取出來就可以了。

//存入數據
String data = "hello world";
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);//取出數據
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");

返回數據給上一個活動?

Activity中還有一個startActivityForResult()方法也是用于啟動活動的,但是這個方法期望在活動銷毀的時候能夠返回一個結果給上一個活動。startActivityForResult()方法接收兩個參數,第一個參數是Intent,第二個參數是請求碼,用于在之后的回調中判斷數據的來源。為了便于理解,下面闡述一下在demo中的使用過程。在FirstActivity(activity可以是任意activity,只要有兩個不同的activity可以使用就行)中添加一個按鈕button1,并設置點擊事件。

button1.setOnClickLinstener(new View.OnClickListener(){@overridepublic void onClick(View v){Intent intent = new Intent(FirstActivity.this,SecondActivity.class);startActivityForResult(intent,1);}
});

在這里我們使用的是startActivityForResult()方法來啟動SecondActivity,請求碼只要是一個唯一值就行,這里傳入的是1。接下來在SecondActivity中給按鈕添加點擊事件,并在這個點擊事件中添加返回數據的邏輯。

button2.setOnClickListener(new View.OnClickListener(){@overridepublic void onClick(View v){Intent intent = new Intent();intent.putExtra("data_return","hello FirstActivity");setResult(RESULT_OK,intent);finish();}
});

android.intent.action.MAIN。在Button2中創建的Intent僅僅是用于傳遞數據,并沒有任何的“意圖”,將需要傳遞的數據添加進去后,調用了setResult()方法接收兩個參數,第一個參數用于向上一個活動返回處理結果,一般只使用RESULT_OK或RESULT_CANCELED這兩個值。第二個參數則是把帶有數據的Intent傳遞回去。最后使用finish()結束當前活動。

由于我們是使用的startActivityForResult()方法來啟動的SecondActivity,在SecondActivity被銷毀之后會回調上一個活動的onActivityResult()方法,所以我們需要在FirstActivity中重寫這個方法,得到返回的數據。

@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){switch(requestCode){case 1:if(resultCode == RESULT_OK){String returnedDAta = data.getStringExtra("data_return");}break;default:break;}
}

onActivityResult()方法第一個參數requestCode,即我們在啟動活動時傳入的請求碼,第二個resultCode,即我們在返回數據時傳入的處理結果,第三個參數,即攜帶著返回數據的Intent。?

?發現錯誤,請指出,謝謝!

有問題歡迎私聊或者發送郵箱(964427082@qq.com)一起討論

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/176707.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息