您好,登錄后才能下訂單哦!
第三章 Intent 意圖
Intent對象主要用來在Android程序的Activity、Service和BroadcastReceiver這三大組件之間傳輸數據。Intent分顯示意圖和隱式意圖兩種。
通過Intent對象跳轉界面,在不同界面間傳輸數據:
a. 顯示意圖方式:代碼中指明具體的跳轉方向
Intent intent = new Intent(); //創建一個Intent對象
intent.setClass(Activity1.this,Activity2.class); //指明跳轉方向
intent.putExtra("key1","value1"); //傳遞數據。key表示數據的索引,vlaue表示要傳輸的數據
intent.putExtra("key2","value2");
...... //可以同時傳遞多個數據,以不同的key值區分
startActivity(intent); //無需返回結果方式開啟Activity
startActivityForResult(intent,requestCode); //帶返回結果的方式開啟Activity
備注:startActivity()和startActivityForResult()根據實際情況任選一種方式。其中,startActivityForResult()中的requestCode參數用于區分是通過當前Activity中的哪一個組件開啟的Activity跳轉。例如:假設當前Activity 1中有兩個按鈕buttonA和buttonB,點擊兩個按鈕均跳轉到Activity 2,此時requestCode即用來區分開啟的Activity跳轉的是點擊了buttonA還是點擊了buttonB。跳轉之后,在所跳轉的Activity 2中接收數據的操作如下:
Intent intent = getIntent(); //獲取Intent對象
intent.getXXX("key"); //通過intent對象獲取數據。其中,getXXX("key")方法中, XXX表示的是所傳遞的數據的數據類型,key要與傳遞數據時 putExtra()方法中對應數據的key值相同。
如果所使用的跳轉方式是startActivityForResult(),則還可以在跳轉之后的Activity 2中使用putExtra()方法設置返回結果的值,然后使用setResult(resultCode,intent)方法設置返回標識。其中,requestCode參數與resultCode作用類似,只是方向相反,即從Activity 2→Activity 1。
之后,可在Activity 1中重寫onActivityResult(int requestCode,int resultCode,Intent data)方法中獲取返回值并進行操作。
b. 隱式意圖方式:代碼中沒有指明具體方向,而是在清單文件中配置過濾條件
<intent-filter>
<action android:name="xxx"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
通過Intent對象啟動Service服務的步驟
a. 創建一個類MyService繼承Service
b. 創建Intent對象,方向指向所創建的類MyService
Intent intent = new Intent(this,MyService.class);
c. 使用startService()方法直接啟動服務
startService(intent);
d. 通過bindService()方法綁定服務,進而啟動服務
//先創建一個ServiceConnection對象
ServiceConnection conn = new ServiceConnection();
//使用bindService()方法,參數Context.BIND_AUTO_CREATE表示如果服務不存在,則自動創建一個
bindService(intent,conn,Context.BIND_AUTO_CREATE);
c. 停止服務
stopService(intent);
d. 解綁服務
unbindService(conn);
通過Intent對象發送廣播步驟
a. 在要發廣播的Activity中,創建Intent對象
Intent intent = new Intent();
b. 調用setAction()方法設置過濾條件
intent.setAction("xxx");
c. 發送廣播
sendBroadcast(intent);
d. 在接收廣播的Activity中創建一個類MyReceiver繼承BroadcastReceiver
e. 在接收廣播的Activity中用代碼注冊廣播
IntentFilter filter = new IntentFilter();
filter.addAction("xxx"); //參數xxx要與intent.setAction()設置的參數一致
或者在清單文件中注冊廣播
<intent-filter>
<action android:name="xxx">
</intent-filter>
f. 在接收廣播的Activity中創建一個MyReceiver對象
MyReceiver receiver = new MyReceiver();
g. 注冊廣播
registerBroadcas(filter,receiver);
h. 注銷廣播
unregisterBroadcast(receiver);
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。