2012-02-21 245 views
5

我想用以下代碼擴展Activity廣播一條烤麪包消息。但是廣播沒有被另一個Activity收到,烤麪包沒有被顯示。有人能解決我的錯誤嗎?主要活動是SendBroadcast.java廣播接收器沒有收到廣播

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 

public class SendBroadcast extends Activity { 

    public static String BROADCAST_ACTION = 
          "com.unitedcoders.android.broadcasttest.SHOWTOAST"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    public void sendBroadcast(View v) { 
     Intent broadcast = new Intent(); 
     broadcast.setAction(BROADCAST_ACTION); 
     sendBroadcast(broadcast); 
    } 
} 

吐司顯示活動是ToastDisplay.java

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.widget.Toast; 

public class ToastDisplay extends Activity { 

    private BroadcastReceiver receiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Toast.makeText(getApplicationContext(), "received", 
        Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    @Override 
    protected void onResume() { 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(SendBroadcast.BROADCAST_ACTION); 
     registerReceiver(receiver, filter); 
     super.onResume(); 
    } 

    @Override 
    protected void onPause() { 
     unregisterReceiver(receiver); 
     super.onPause(); 
    } 
} 

manifest.java是如下

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.broad" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <uses-sdk android:minSdkVersion="3" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".SendBroadcast" 
      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=".ToastReceiver" > 
      <intent-filter> 
       <action android:name="com.unitedcoders.android.broadcasttest.SHOWTOAST" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

回答

9

可以有兩種類型broacast:靜態和動態。靜態是那些在清單文件中聲明的。動態可以在運行時聲明。您將這兩種類型的廣播組合在一個廣播中。

要聲明一個簡單的動態廣播,您可以使用以下代碼(即基於您的代碼)。當顯示活動時,它將簡單顯示吐司消息。

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Toast; 

public class BroadcastTestActivity extends Activity { 

    public static String BROADCAST_ACTION =  
          "com.unitedcoders.android.broadcasttest.SHOWTOAST"; 
    BroadcastReceiver br = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.w("Check", "Inside On Receiver"); 
      Toast.makeText(getApplicationContext(), "received", 
        Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(BROADCAST_ACTION); 
     filter.addCategory(Intent.CATEGORY_DEFAULT); 
     registerReceiver(br, filter); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     sendBroadcast(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     unregisterReceiver(br); 
    } 

    public void sendBroadcast() { 
     Intent broadcast = new Intent(); 
     broadcast.setAction(BROADCAST_ACTION); 
     broadcast.addCategory(Intent.CATEGORY_DEFAULT); 
     sendBroadcast(broadcast); 
    } 
} 

因此,現在,而不是顯示烤麪包,你可以打電話給你的新活動。以下操作取決於您的需求(您想要做什麼)。

+0

好兄弟可以告訴我,我必須從清單中刪除該靜態廣播,並可以給我一個提示什麼將是我剩下的.java文件 – 2012-02-21 13:32:02

+0

這取決於你想要做什麼。我已經向您展示了一個非常簡單的示例,說明如何顯示收到廣播後顯示的敬酒信息。你可以簡單地創建一個新項目並測試這個類。 – Yury 2012-02-21 13:36:28

+0

首先簡單我想要動態顯示Toast – 2012-02-21 13:41:40

0

嘗試

<activity android:name=".SendBroadcast" android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.intent.action.BROADCAST" /> 
    </intent-filter> 
</activity>  

onCreate()通話

sendBroadcast(v); 
+0

傢伙不工作試過 – 2012-02-21 11:34:13

+0

不工作的哥哥 – 2012-02-21 13:29:34

+0

什麼是'<操作機器人:名字= 「android.intent.action.BROADCAST」'呢?沒有看到這樣的將是必要的... – 2016-05-04 19:28:40

3

哪裏是ToastReceiver類?

<receiver android:name=".ToastReceiver"> 
    <intent-filter> 
     <action android:name="com.unitedcoders.android.broadcasttest.SHOWTOAST"/> 
</intent-filter> 
</receiver>` 

變化

public class ToastDisplay extends Activity { 
    private BroadcastReceiver receiver = new BroadcastReceiver() { 

} 

public class ToastReceiver extends BroadcastReceiver { 

} 
+0

不工作兄弟 – 2012-02-21 13:29:27

-2
Button b1 = (Button)findViewById(R.id.button1); 

b1.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     try { 
      String RESULT = new TestAsyncTask().execute(" ").get(); 
      System.out.println("RESULT "+RESULT); 
     } 
     catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     catch (ExecutionException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
});