2011年11月19日 星期六

【Android】TQC+題組系列3(二)


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

沒有留言:

張貼留言