編輯:Android開發教程
通過使用Intent-Filter中的<category>元素,我們可以把activities進行分組。假設已經在 AndroidManifest.xml中添加了<category>元素:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.manoel.Intents" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".IntentsActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MyBrowserActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="net.learn2develop.MyBrowser" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="com.manoel.Apps" /> <data android:scheme="http" /> </intent-filter> </activity> </application> </manifest>
在這種情況下,以下的代碼將直接調用MyBrowserActivity:
Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://www.amazon.com")); nbsp;// 注意這句代碼 i.addCategory("com.manoel.Apps"); startActivity(Intent.createChooser(i, "Open URL using..."));
在以上的代碼中,我們使用 addCategory()方法為Intent對象添加Category屬性。如果遺漏了addCategory()這句,之前的代碼仍然能夠 調用MyBrowserActivity,因為它仍然匹配了默認的Category:android.intent.category.DEFAULT。
但是 ,如果指定了一個並沒有在Intent-Filter中定義的Category,那麼,將不會有Activity被調用:
Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://www.amazon.com")); // i.addCategory("net.learn2develop.Apps"); // 這個category不匹配Intent-Filter中的任何category i.addCategory("net.learn2develop.OtherApps"); startActivity(Intent.createChooser(i, "Open URL using..."));
net.learn2develop.OtherApps,不匹配Intent-Filter中的任何一個Category,所以 ,運行以上代碼的時候,將會拋出一個運行時異常。
但是,如果在AndroidManifest.xml中添加如下 代碼,之前的代碼就可以運行了:
<activity android:name=".MyBrowserActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="net.learn2develop.MyBrowser" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="net.learn2develop.Apps" /> <!-- 添加這句代碼 --> <category android:name="net.learn2develop.OtherApps" /> <data android:scheme="http" /> </intent-filter> </activity>
也可以為Intent對象添加多重Category屬性,舉個例子:
Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://www.amazon.com")); // 多重的Category i.addCategory("com.manoel.Apps"); i.addCategory("com.manoel.OtherApps"); i.addCategory("com.manoel.SomeOtherApps"); startActivity(Intent.createChooser(i, "Open URL using..."));
因為Intent-Filter中並沒有 定義net.learn2develop.SomeOtherApps這個Category,以上的代碼將不會調用MyBrowserActivity。如果想 要解決這個問題,那麼,在目標Activity被調用之前,添加到Intent對象中的所有Category屬性都必須全部 地被定義在Intent-Filter中。
查看本欄目更多精彩內容:http://www.bianceng.cn/OS/extra/
Activity生命周期:一個activity主要有三個狀態:當在屏幕前台時(位於當前任務堆棧的頂部),它是活躍或運行的狀態。它就是相應用戶操作的activity。當它失
微軟已經對Android平台上的Outlook應用進行了升級,除了修復消費者反饋的大量BUG之外還對收件箱的功能進行了強化,為消費者提供未讀和已標記信息的篩選功能,此外還
有些情況需要將同一類型映射到不同的類實現,還是使用繪圖的例 子.IShape, Rectangle, MyRectangle, MySquare,有如下繼承關系:我們可能
在上一篇的文章中,我們介紹了Hiero這個非常好用工具的使用,但是LIbgdx的BitmapFont不支持多圖,常 用漢字3500個,你總不能用hiero自己做吧,那怎麼