這題的程式其實很少,考你對 xml 內容跟 ddms 的熟悉度比較多。
首先題目上寫的 activity、receiver並不是主從的巢狀屬性關係,而是兩個分立的。 其實這從一開始的三個檔案的檔名就可以看出來,不過我頭腦不清楚,一直想把 receiver 塞到 Image 這個 activity 裡。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="COM.TQC.GDD03" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".GDD03" 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="Image" /> <receiver android:name="SMSreceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application> <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> </manifest>
另外就是GDD03這個主程式在這次實作沒有寫到東西,SMSreceiver 這個類別是全域廣播,所以主程式不用加入任何跟它相關的程式碼也會被觸發, onReceive 觸發後轉入 Image class,不過因為一般來說不會用全域廣播做 activity 的轉換所以需要用到 addFlags 來指定開啟新 activity 為動作,而且由於 SMSreceiver 不是 activity,所以 this 不會有 startActivity用,必須使用 onReceive 傳入的context。
@Override public void onReceive(Context context, Intent intent) { if(!intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) return; context.startActivity(new Intent(context,Image.class).addFlags(intent.FLAG_ACTIVITY_NEW_TASK)); }
沒有留言:
張貼留言