天天看點

android的Intent

1

2

3

4

5

6

7

8

9

10

<code>        </code><code>//通過制定setComponent來啟動元件</code>

<code>    </code><code>public</code> <code>void</code> <code>start(View view){</code>

<code>        </code><code>//建立一個意圖</code>

<code>        </code><code>//Intent intent=new Intent(this,MainActivity2.class);</code>

<code>        </code><code>Intent intent=</code><code>new</code> <code>Intent();</code>

<code>        </code><code>//建立元件,通過元件響應,直接Intent</code>

<code>        </code><code>ComponentName component=</code><code>new</code> <code>ComponentName(</code><code>this</code><code>, MainActivity2.</code><code>class</code><code>);</code>

<code>        </code><code>intent.setComponent(component);</code>

<code>        </code><code>startActivity(intent);</code>

<code>    </code><code>}</code>

<code>        </code><code>public</code> <code>void</code> <code>start1(View view){</code>

<code>        </code><code>Intent intent=</code><code>new</code> <code>Intent(</code><code>this</code><code>,MainActivity9.</code><code>class</code><code>);</code>

通過action屬性查找啟動activity,必須在清單檔案中進行配置

<code>        </code><code>//通過action屬性查找啟動activity</code>

<code>    </code><code>public</code> <code>void</code> <code>start2(View view){</code>

<code>        </code><code>//設定動作,實際上action就是字元串标記而已</code>

<code>        </code><code>intent.setAction(MainActivity3.MY_ACTION);</code>

MainActivity3

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

<code>package</code> <code>com.example.intent;</code>

<code>import</code> <code>android.app.Activity;</code>

<code>import</code> <code>android.os.Bundle;</code>

<code>/**</code>

<code> </code><code>* 在自定義動作時,使用action元件時,必須添加一個預設類别</code>

<code> </code><code>* &lt;activity android:name="MainActivity3"&gt;</code>

<code>              </code><code>&lt;intent-filter &gt;</code>

<code>                  </code><code>&lt;action android:name="com.example.action.MY_ACTION"&gt;</code>

<code>                  </code><code>&lt;/action&gt;</code>

<code>                  </code><code>&lt;category android:name="android.intent.category.DEFAULT"/&gt;</code>

<code>   </code><code>&lt;/intent-filter&gt;</code>

<code>   </code> 

<code> </code><code>* 如果有多個元件被比對成功,就會對話框清單的形式讓使用者進行選擇</code>

<code> </code><code>* */</code>

<code>public</code> <code>class</code> <code>MainActivity3 </code><code>extends</code> <code>Activity{</code>

<code>    </code><code>//自定義action标記</code>

<code>    </code> 

<code>    </code><code>public</code> <code>static</code> <code>final</code> <code>String MY_ACTION=</code><code>"com.example.action.MY_ACTION"</code><code>;</code>

<code>    </code><code>@Override</code>

<code>    </code><code>protected</code> <code>void</code> <code>onCreate(Bundle savedInstanceState) {</code>

<code>        </code><code>// TODO Auto-generated method stub</code>

<code>        </code><code>super</code><code>.onCreate(savedInstanceState);</code>

<code>        </code><code>setContentView(R.layout.activity_main3);</code>

<code>}</code>

清單檔案中的配置,如果沒有類别,必須寫上預設類别

&lt;category android:name="android.intent.category.LAUNCHER" /&gt;

<code>  </code><code>&lt;application</code>

<code>        </code><code>android:allowBackup=</code><code>"true"</code>

<code>        </code><code>android:icon=</code><code>"@drawable/ic_launcher"</code>

<code>        </code><code>android:label=</code><code>"@string/app_name"</code>

<code>        </code><code>android:theme=</code><code>"@style/AppTheme"</code> <code>&gt;</code>

<code>        </code><code>&lt;activity</code>

<code>            </code><code>android:name=</code><code>".MainActivity"</code>

<code>            </code><code>android:label=</code><code>"@string/app_name"</code> <code>&gt;</code>

<code>            </code><code>&lt;intent-filter&gt;</code>

<code>                </code><code>&lt;action android:name=</code><code>"android.intent.action.MAIN"</code> <code>/&gt;</code>

<code>                </code><code>&lt;category android:name=</code><code>"android.intent.category.LAUNCHER"</code> <code>/&gt;</code>

<code>            </code><code>&lt;/intent-filter&gt;</code>

<code>        </code><code>&lt;/activity&gt;</code>

加入的類别越多,越精确,如果有找不到的類别會報錯(假設有兩個類别,一個類别未找到,則報錯)

<code>public</code> <code>void</code> <code>start3(View view){</code>

<code>        </code><code>intent.setAction(MainActivity4.MY_ACTION);</code>

<code>        </code><code>intent.addCategory(MainActivity4.MY_CATEGORY);</code>

<code>        </code><code>//如果MainActivity4中沒有在清單檔案中配置,且寫了下面的類别,則會報錯</code>

<code>        </code><code>//intent.addCategory(MainActivity4.MY_CATEGORY2);</code>

<code>        </code><code>//加入的類别越多,越精确,如果有找不到的類别會報錯</code>

MainActivity4

<code> </code><code>* 自定義類别</code>

<code> </code><code>* 在Intent中可以添加多個類别</code>

<code> </code><code>* 那就要求被比對的元件必須同時滿足這多個類别才能比對成功,否則比對失敗</code>

<code> </code><code>* </code>

<code>public</code> <code>class</code> <code>MainActivity4 </code><code>extends</code> <code>Activity{</code>

<code>    </code><code>//自定義動作類别</code>

<code>    </code><code>public</code> <code>static</code> <code>final</code> <code>String MY_CATEGORY=</code><code>"com.example.category.myCategory"</code><code>;</code>

<code>    </code><code>public</code> <code>static</code> <code>final</code> <code>String MY_CATEGORY2=</code><code>"com.example.category.myCategory2"</code><code>;</code>

<code>    </code><code>//自定義動作</code>

<code>    </code><code>public</code> <code>static</code> <code>final</code> <code>String MY_ACTION=</code><code>"com.example.action.myAction2"</code><code>;</code>

<code>        </code><code>setContentView(R.layout.activity_main4);</code>

清單檔案中的MainActivity4

<code> </code><code>&lt;activity android:name=</code><code>"MainActivity4"</code><code>&gt;</code>

<code>                </code><code>&lt;!--   &lt;action android:name=</code><code>"com.example.action.MY_ACTION"</code><code>&gt;&lt;/action&gt; --&gt;</code>

<code>                  </code><code>&lt;action android:name=</code><code>"com.example.action.myAction2"</code><code>&gt;&lt;/action&gt;</code>

<code>                  </code><code>&lt;category android:name=</code><code>"com.example.category.myCategory"</code><code>/&gt;</code>

<code>                  </code><code>&lt;category android:name=</code><code>"com.example.category.myCategory2"</code><code>/&gt;</code>

<code>                  </code><code>&lt;category android:name=</code><code>"android.intent.category.DEFAULT"</code><code>/&gt;</code>

<code>                  </code><code>&lt;!-- 沒有類别時要加上預設類别 --&gt;</code>

<code>              </code><code>&lt;/intent-filter&gt;</code>

<code> </code><code>&lt;/activity&gt;</code>

 intent中的Date屬性

 Date屬性表示動作(要操作)的資料

 實際上一個Date是用一個URI對象表示

 通常情況下,使用action+date屬性的組合來描述一個意圖(intent)

 當Intent比對的元件有多個時,先顯示優先級高的元件,如果優先級相同,顯示清單讓使用者自己選擇

 優先級從-1000到1000,并且其中一個必須為負值才有效

MainActivity5:指定通路一個網址

                &lt;intent-filter android:priority="800"&gt;

                    &lt;action android:name="android.intent.action.VIEW"/&gt;

                    &lt;data android:scheme="http" android:host="java.lampbrother.net"/&gt;

                &lt;category android:name="android.intent.category.DEFAULT"/&gt;

                &lt;/intent-filter&gt;

Intent intent=new Intent();

intent.setAction(Intent.ACTION_VIEW);

Uri uri=Uri.parse("http://java.lampbrother.net");

intent.setData(uri);

startActivity(intent);

27

28

29

30

31

32

33

34

35

36

37

38

39

40

<code>import</code> <code>android.content.Intent;</code>

<code>import</code> <code>android.net.Uri;</code>

<code>import</code> <code>android.view.View;</code>

<code> </code><code>* intent中的Date屬性</code>

<code> </code><code>* Date屬性表示動作(要操作)的資料</code>

<code> </code><code>* 實際上一個Date是用一個URI對象表示</code>

<code> </code><code>* 通常情況下,使用action+date屬性的組合來描述一個意圖(intent)</code>

<code> </code><code>* 當Intent比對的元件有多個時,先顯示優先級高的元件,如果優先級相同,顯示清單讓使用者自己選擇</code>

<code> </code><code>* 優先級從-1000到1000,并且其中一個必須為負值才有效</code>

<code>public</code> <code>class</code> <code>MainActivity5 </code><code>extends</code> <code>Activity{</code>

<code>        </code> 

<code>        </code><code>setContentView(R.layout.activity_main5);</code>

<code>    </code><code>public</code> <code>void</code> <code>testActionDateClick(View ivew){</code>

<code>        </code><code>intent.setAction(Intent.ACTION_VIEW);</code>

<code>        </code><code>Uri uri=Uri.parse(</code><code>"http://java.lampbrother.net"</code><code>);</code>

<code>        </code><code>intent.setData(uri);</code>

<code>    </code><code>public</code> <code>void</code> <code>testActivity7(View view){</code>

<code>        </code><code>Intent intent=</code><code>new</code> <code>Intent(</code><code>this</code><code>,MainActivity7.</code><code>class</code><code>);</code>

清單檔案中MainActivity5的配置

<code>         </code><code>&lt;activity android:name=</code><code>"MainActivity5"</code><code>&gt;&lt;/activity&gt;</code>

<code>            </code><code>&lt;activity android:name=</code><code>"MainActivity6"</code><code>&gt;</code>

<code>                </code><code>&lt;intent-filter android:priority=</code><code>"800"</code><code>&gt;</code>

<code>                    </code><code>&lt;action android:name=</code><code>"android.intent.action.VIEW"</code><code>/&gt;</code>

<code>                    </code><code>&lt;data android:scheme=</code><code>"http"</code> <code>android:host=</code><code>"java.lampbrother.net"</code><code>/&gt;</code>

<code>                    </code><code>&lt;category android:name=</code><code>"android.intent.category.DEFAULT"</code><code>/&gt;</code>

<code>                </code><code>&lt;/intent-filter&gt;</code>

<code>         </code><code>&lt;/activity&gt;</code>

Intent

 date+type屬性

 type表示資料的類型或者MIME類型(如:text/xml,text/html,audio/mp3,image/png...)

 date和type屬性,一般隻需要一個

 通過setDate方法會把type實行設定為null,相反,設定setType也會把date屬性設定為null

 如果想要兩個屬性同時設定,要使用setDateAndType方法設定

MianActivity7:調用系統選擇(各種)檔案,以mp3檔案為例,

<code> </code><code>* Intent</code>

<code> </code><code>* date+type屬性</code>

<code> </code><code>* type表示資料的類型或者MIME類型(如:text/xml,text/html,audio/mp3,image/png...)</code>

<code> </code><code>* date和type屬性,一般隻需要一個</code>

<code> </code><code>* 通過setDate方法會把type實行設定為null,相反,設定setType也會把date屬性設定為null</code>

<code> </code><code>* 如果想要兩個屬性同時設定,要使用setDateAndType方法設定</code>

<code>public</code> <code>class</code> <code>MainActivity7 </code><code>extends</code> <code>Activity{</code>

<code>        </code><code>setContentView(R.layout.activity_main7);</code>

<code>    </code><code>public</code> <code>void</code> <code>play7(View view){</code>

<code>        </code><code>Uri date=Uri.parse(</code><code>"file:///sdcard/xx.mp3"</code><code>);</code>

<code>        </code><code>//intent.setData(date);</code>

<code>        </code><code>//intent.setDataAndType(data, type);</code>

<code>        </code><code>intent.setType(</code><code>"audio/mp3"</code><code>);</code>

MainActivity8

 本文轉自 matengbing 51CTO部落格,原文連結:http://blog.51cto.com/matengbing/1883732

繼續閱讀