一起學Android之Intent

来源:https://www.cnblogs.com/hsiang/archive/2018/12/20/10152985.html
-Advertisement-
Play Games

本文簡述在Android開發中Intent的常見應用,僅供學習分享使用。 ...


本文簡述在Android開發中Intent的常見應用,僅供學習分享使用。

什麼是Intent?

  Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此Intent的描述,負責找到對應的組件,將 Intent傳遞給調用的組件,並完成組件的調用。因此,Intent在這裡起著一個媒體中介的作用,專門提供組件互相調用的相關信息,實現調用者與被調用者之間的解耦。【官方文檔:An intent is an abstract description of an operation to be performed(執行某操作的抽象描述)】

Intent的用途有哪些?

關聯不同的組件:

  1. 用來激活啟動其他應用程式的組件。
  2. 作為傳遞數據和事件的橋梁。

Intent調用模式

  1. 顯式Intent:直接指定目標組件的ComponentNamae,適合啟動同一個應用中的其他組件,比如在某應用程式內,一個Activity啟動一個Service。
  2. 隱式Intent:不直接指定目標組件的ComponentName Class,適合啟動設備中不同應用中的組件。

隱式Intent常見例子

打開地圖:

1  //打開地圖
2     public void open_map(View v) {
3         // Map point based on address
4         //Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
5         // Or map point based on latitude/longitude
6          Uri location = Uri.parse("geo:34.9501439901632,114.95770290767824?z=14"); // z param is zoom level
7         Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
8         startActivity(mapIntent);
9     }

打開網頁:

1  //打開指定的網頁
2     public void open_url(View v){
3         Uri webpage = Uri.parse("http://www.baidu.com");
4         Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
5         startActivity(webIntent);
6     }

打電話

1 //打電話
2     public void open_tel(View v){
3         Uri number = Uri.parse("tel:10086");
4         Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
5         startActivity(callIntent);
6     }

日曆上設置日程

 1 //設置日曆事件
 2     public void open_calendar(View v){
 3         Intent calendarIntent = new Intent(Intent.ACTION_INSERT, CalendarContract.Events.CONTENT_URI);
 4         Calendar beginTime =  Calendar.getInstance();
 5         beginTime.set(2012, 0, 19, 7, 30);
 6         Calendar endTime = Calendar.getInstance();
 7         endTime.set(2012, 0, 19, 10, 30);
 8         calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
 9         calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
10         calendarIntent.putExtra(CalendarContract.Events.TITLE, "Ninja class");
11         calendarIntent.putExtra(CalendarContract.Events.EVENT_LOCATION, "Secret dojo");
12         startActivity(calendarIntent);
13     }

 

判斷Intent是否有接收App

 1 public void open_chkintent(View v){
 2         Intent calendarIntent = new Intent(Intent.ACTION_INSERT, CalendarContract.Events.CONTENT_URI);
 3         Calendar beginTime =  Calendar.getInstance();
 4         beginTime.set(2012, 0, 19, 7, 30);
 5         Calendar endTime = Calendar.getInstance();
 6         endTime.set(2012, 0, 19, 10, 30);
 7         calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
 8         calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
 9         calendarIntent.putExtra(CalendarContract.Events.TITLE, "Ninja class");
10         calendarIntent.putExtra(CalendarContract.Events.EVENT_LOCATION, "Secret dojo");
11         PackageManager packageManager = getPackageManager();
12         List<ResolveInfo> activities = packageManager.queryIntentActivities(calendarIntent, 0);
13         boolean isIntentSafe = activities.size() > 0;
14         String msg=isIntentSafe?"有合適的接收":"沒有合適的接收";
15         Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
16     }

顯式調用Intent

顯式調用並傳遞參數

1 //打開一個Activity
2     public void open_activity_param(View v){
3         Intent intent =new Intent(this,OtherActivity.class);
4         intent.putExtra("Name","Alan.hsiang");
5         intent.putExtra("Age",100);
6         intent.putExtra("Sex",true);
7         startActivity(intent);
8     }

新的Activity獲取參數並展示

 1 Intent intent=getIntent();
 2         if(intent!=null){
 3             if( intent.hasExtra("Name")) {
 4                 String name = intent.getStringExtra("Name");
 5                 Integer age = intent.getIntExtra("Age", 0);
 6                 Boolean sex = intent.getBooleanExtra("Sex", true);
 7                 Log.i("DemoIntent", "onCreate: "+name+"--"+age+"--"+sex+" ");
 8                 EditText txtName = (EditText) this.findViewById(R.id.txt_name);
 9                 txtName.setText(name);
10                 Log.i("DemoIntent", "onCreate: txtName ");
11                 EditText txtAge = (EditText) this.findViewById(R.id.txt_age);
12                 txtAge.setText(age.toString());//此處要轉換成字元串,否則會被當成id,從而報錯
13                 Log.i("DemoIntent", "onCreate: txtAge ");
14                 RadioButton rbMale = (RadioButton) this.findViewById(R.id.rb_male);
15                 RadioButton rbFemale = (RadioButton) this.findViewById(R.id.rb_female);
16                 Log.i("DemoIntent", "onCreate: rbButton ");
17                 rbMale.setChecked(sex);
18                 rbFemale.setChecked(!sex);
19             }
20         }

 

備註

 Intent的用途還有很多,本文旨在拋磚引玉,希望大家共同學習。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [20181220]使用提示OR_EXPAND優化.txt--//鏈接http://www.itpub.net/thread-2107240-2-1.html,http://www.itpub.net/thread-2107231-2-1.html的討論.--//ZALBB建議在18c下嘗試看看,我 ...
  • 1,某條數據放首位,其他倒序並分頁 select * from Student order by( case when id='2' then 1 ELSE 4 END),id desc limit 0,5; 2,給查詢的每條記錄添加編號 select (@i:=@i+1) no , s.* fro ...
  • Ubuntu 12.04上安裝Hadoop並運行 作者:凱魯嘎吉 - 博客園 http://www.cnblogs.com/kailugaji/ 在官網上下載好四個文件 在Ubuntu的/home/wrr/下創建一個文件夾java,將這四個文件拷到Ubuntu的/home/wrr/java/下,將e ...
  • 本文由雲+社區發表 本文作者:孫旭,騰訊資料庫開發工程師,9年資料庫內核開發經驗;熟悉資料庫查詢處理,併發控制,日誌以及存儲系統;熟悉PostgreSQL(Greenplum,PGXC等)、Teradata等資料庫內核實現機制。 CynosDB 是騰訊資料庫研發團隊推出的自研資料庫,有Postgre ...
  • 關於oracle database link,使用database link相關的查詢語句是否會開啟事務呢?我們知道,在資料庫中一個簡單的SELECT查詢語句不會產生事務(select for update會產生事務)。如下測試所示: 我們首先準備測試環境,創建了一個database link: L... ...
  • http://www.cnblogs.com/yijiaming/p/9684601.html 方法一: 1、需要安裝pymssql pip install pymssql 2、使用方法: 方法二: 1、安裝必要的組件: pip install django-sqlserver django-pyt ...
  • 公眾號:SAP Technical 本文作者:matinal 原文出處:http://www.cnblogs.com/SAPmatinal/ 原文鏈接:【HANA系列】SAP HANA XS使用Data Services查詢CDS實體【一】 前言部分 使用SAP HANA XS數據服務(XSDS)庫 ...
  • 今天不瘦給大家分享一下redis第二個基本數據類型:列表。如果大家瞭解基本數據結構,相信大家對列表不會陌生,比如在C語言中我們可以使用數組實現一個列表,也可以使用鏈表實現一個列表(列錶鏈表傻傻分不清楚,列表是一種抽象數據類型,鏈表為一種實現方式)。 言歸正傳,那redis是怎麼實現列表的呢?答案是: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...