2012-04-08 48 views
0

我是新來的android,我正在嘗試播放演示,通過閱讀文檔盡了最大的努力,但它不工作。請看看我的代碼:Android:廣播演示不起作用

BroadcastDemoActivity.java

package com.broadcastdemo; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 

public class BroadcastDemoActivity extends Activity { 
    /** Called when the activity is first created. */ 
    public static final String PUBLIC_HOLIDAYS = "com.paad.action.PUBLIC_HOLIDAYS"; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Intent intent = new Intent(PUBLIC_HOLIDAYS); 
     intent.putExtra("Holiday", "8th April is a holiday"); 
     sendBroadcast(getIntent()); 
    } 
} 

Receive.java

package com.broadcastdemo; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.Toast; 

public class Receive extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     String message = intent.getStringExtra("Holiday"); 
     Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 

    } 

} 

的Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.broadcastdemo" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="15" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".BroadcastDemoActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name=".Receive"> 
      <intent-filter>    
       <action android:name="com.paad.action.PUBLIC_HOLIDAYS"/> 
      </intent-filter>    
     </receiver> 
    </application> 
</manifest> 

我知道我錯過了一些我不知道的東西,請幫忙。

回答

0

我相信你的問題是在sendBroadcast的調用中。

Intent intent = new Intent(PUBLIC_HOLIDAYS); 
    intent.putExtra("Holiday", "8th April is a holiday"); 
    sendBroadcast(getIntent()); 

你是不是送你構建,你發送的getIntent()返回的意圖,這將是該活動開始的意圖的意圖。

應該

Intent intent = new Intent(PUBLIC_HOLIDAYS); 
    intent.putExtra("Holiday", "8th April is a holiday"); 
    sendBroadcast(intent); 
+0

哦,是的,你是正確的,現在它的工作:) 因此,它是像有是開始了我的活動有一定隱含的意圖是什麼?請向我解釋這個 非常感謝您解決我的問題 – user182944 2012-04-08 04:17:52

+0

是的。您是否注意到您的清單中您的活動中設置了意圖過濾器?這是主發射器意圖的過濾器。因此,當用戶點擊啓動器中的應用程序圖標時,啓動程序將構建一個此類意圖並將其發送,例如startActivity(http://developer.android.com/reference/android/content/Context.html#startActivity (android.content.Intent)) – JesusFreke 2012-04-08 04:21:11

+0

請指出,如果我已經理解錯了什麼。 在上面的代碼中,PUBLIC_HOLIDAYS是一個常量字符串,我將它作爲動作參數傳遞給Intent。 Action在manifest.xml中定義,並且執行該操作(即執行sendBroadcast(intent)活動方法時),它將在manifest.xml文件中搜索該意圖的接收者。現在,由於Receiver是Receive.java,並且由於類擴展了BroadcastReceivet,控件進入onReceive方法並顯示Toast消息。 我收到了嗎?如果不是,請指出我的錯誤。 – user182944 2012-04-08 04:33:26