這題的程式其實很少,考你對 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));
}

沒有留言:
張貼留言