編輯:關於Android編程
Intent 是一個將要執行的動作的抽象的描述,一般來說是作為參數來使用,由Intent來協助完成android各個組件之間的通訊。Android中的Intent可以理解為不同組件通信的媒介或者信使。所以Intent的主要作用就是調用起來一個Activity或者Service等。
意圖分為顯示意圖和隱式意圖。一般對於顯示意圖使用是比較方便的,如果我們調用的使我們自己的Activity,則可以直接啟動就可以了,如果調用的是其他的Activity,這時候我們就需要獲取到我們要啟動的Activity的包名和類名,然後調用。
對於自己寫的Activity可以按照如下方法調用:
Intent intent = new Intent(this, SecondActivity.class); startActivity(intent);如果需要調用別人的Activity,我們需要確定包名類名。但是有時候我們不清楚Activity的包名類名,這時候我們需要在設備上或者模擬器上點擊一下我們想要調用的Activity,這裡以浏覽器為例,這時候在logcat中會打印出如下輸出:
02-24 23:11:19.652: I/ActivityManager(61): Starting: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.browser/.BrowserActivity } from pid 137
這時候我們需要關注的是cmp=com.android.browser/.BrowserActivity,通過這個我們能夠確定包名為com.android.browser,類名為com.android.browser.BrowserActivity,這時候就可以通過如下代碼調用起Activity:
Intent intent = new Intent(); intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity"); startActivity(intent);上面介紹的都是顯示意圖,但是顯示意圖也有其缺點,如果我們調用別人的Activity,如果別人的包名類名改了,這時候我們調用就會失敗,為了應對這種情況,Android中提供的隱式意圖,對於隱式意圖我們在調用的時候需要給我們的Intent配置很多參數,然後Android系統會根據這些參數去調用對應的Activity(對於隱式意圖的詳細解釋,還請百度)。如果某個Activity想通過隱式意圖的方式被調用,必須在其AndroidManifest.xml中配置對應的參數,我這裡有一個配置例子如下:
這裡配置了一個Activity,並且使其能夠通過隱式意圖調用,下面是調用的代碼:
Intent intent = new Intent(); intent.setAction("com.mxy.intenttest"); /**添加類別:startActivity(intent)啟動Activity時會自動添加 * android.intent.category.DEFAULT類別,所以需要在Manifest中 * 配置該類別.但在程序中不需要明確添加該類別 * 只有當Intent請求中所有的Category與組件中某一個IntentFilter的上面的代碼是調用自己寫的Activity,其實Android系統也提供了很多的隱式意圖供我們調用,下面就是一個例子:完全匹配時, * 才會讓該 Intent請求通過測試,IntentFilter中多余的 聲明並不會導致匹配失敗。 * 一個沒有指定任何類別測試的 IntentFilter僅僅只會匹配沒有設置類別的Intent請求。*/ // intent.addCategory("android.intent.category.DEFAULT"); /**設置數據:API中說這個方法會將setType的方法設置的類型清除掉*/ intent.setData(Uri.parse("http://www.andyidea.com:8080/person")); /**設置類型:API中說這個方法會將setData上面的方法設置的數據清除掉*/ intent.setType("vnd.androd.cursor.item/test"); /**同時設置數據和類型:如果Intent過濾器中同時包含數據和數據類型的設置 * 就只能使用該方式來設置數據和類型*/ intent.setDataAndType(Uri.parse("http://www.andyidea.com:8080/person"), "vnd.androd.cursor.item/test"); startActivity(intent);
Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent);
Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("name", "mengxiangyue"); startActivity(intent);然後在啟動的Activity中使用如下代碼接收傳遞過來的值:
Intent intent = this.getIntent(); String name = ""; if(intent.getExtras() != null){ name = intent.getExtras().getString("name"); Toast.makeText(this, name, Toast.LENGTH_LONG).show(); }
Intent intent = new Intent(this, ThirdActivity.class); intent.putExtra("name", "mengxiangyue"); startActivityForResult(intent, 1);// 1代表請求碼在被啟動的Activity執行如下代碼:
Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("back", "這是返回的值"); setResult(2,intent); finish();這時候數據傳遞回來了,需要在Activity中接收,這時候需要實現如下方法:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { System.out.println("requestCode:" + requestCode + " resultCode:" + resultCode + " data:" + data.getStringExtra("back")); Toast.makeText(this, data.getStringExtra("back"), Toast.LENGTH_LONG).show(); super.onActivityResult(requestCode, resultCode, data); }該方法接收requestCode,resultCode兩個參數,這兩個參數可以唯一的確定某次請求對應的結果,防止返回的結果發生混亂。
例子工程的下載地址:http://download.csdn.net/detail/mengxiangyue/7242667
最近有個項目需要用到json的傳輸,之前不是太了解,在網上找了些相關資料,寫了一個小小的demo,可以實現基本功能:android客戶端發送json到服務端,服務端使用j
黑夜黑夜給了我黑色的眼睛,我卻用它尋找光明~傳值方式AIDL是允許跨進程傳遞值的,一般來說有三種方式:- 廣播;這種算是比較常見的一種方式了,傳遞小數據不錯- 文件;這個
在實際的項目開發過程中(應用的APP),我們用網絡存儲的地方比較多。今天我們一起來談談網絡存儲的功能。什麼是網絡存儲?就是我們的數據存儲在一個服務器上,app客戶端類
一、首先來看看效果這是一個帶有刪除按鈕的輸入文本框, 需要新建一個類繼承自EditText, 先把代碼貼出來, 然後在解釋:示例代碼如下:public class Edi