2012-02-21 155 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(); 
     } 
    } 
});