android – BroadcastReceiver没有接收广播

前端之家收集整理的这篇文章主要介绍了android – BroadcastReceiver没有接收广播前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用以下代码扩展活动来广播Toast消息.但是广播没有被另一个活动收到,烤面包没有显示.有人能解决我的错误吗?主要活动是SendBroadcast. @L_502_0@
  1. import android.app.Activity;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.view.View;
  7.  
  8. public class SendBroadcast extends Activity {
  9.  
  10. public static String BROADCAST_ACTION =
  11. "com.unitedcoders.android.broadcasttest.SHOWTOAST";
  12.  
  13. @Override
  14. public void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.main);
  17. }
  18.  
  19. public void sendBroadcast(View v) {
  20. Intent broadcast = new Intent();
  21. broadcast.setAction(BROADCAST_ACTION);
  22. sendBroadcast(broadcast);
  23. }
  24. }

Toast Display Activity是ToastDisplay.java

  1. import android.app.Activity;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.IntentFilter;
  6. import android.widget.Toast;
  7.  
  8. public class ToastDisplay extends Activity {
  9.  
  10. private BroadcastReceiver receiver = new BroadcastReceiver() {
  11.  
  12. @Override
  13. public void onReceive(Context context,Intent intent) {
  14. Toast.makeText(getApplicationContext(),"received",Toast.LENGTH_SHORT).show();
  15. }
  16. };
  17.  
  18. @Override
  19. protected void onResume() {
  20. IntentFilter filter = new IntentFilter();
  21. filter.addAction(SendBroadcast.BROADCAST_ACTION);
  22. registerReceiver(receiver,filter);
  23. super.onResume();
  24. }
  25.  
  26. @Override
  27. protected void onPause() {
  28. unregisterReceiver(receiver);
  29. super.onPause();
  30. }
  31. }

和manifest.xml如下

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.broad"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6. <uses-sdk android:minSdkVersion="3" />
  7. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  8. <application
  9. android:icon="@drawable/ic_launcher"
  10. android:label="@string/app_name" >
  11. <activity
  12. android:name=".SendBroadcast"
  13. android:label="@string/app_name" >
  14. <intent-filter>
  15. <action android:name="android.intent.action.MAIN" />
  16. <category android:name="android.intent.category.LAUNCHER" />
  17. </intent-filter>
  18. </activity>
  19. <receiver android:name=".ToastReceiver" >
  20. <intent-filter>
  21. <action android:name="com.unitedcoders.android.broadcasttest.SHOWTOAST" />
  22. </intent-filter>
  23. </receiver>
  24. </application>
  25. </manifest>

解决方法

可以有两种类型的broacast:静态和动态.静态是清单文件中声明的那些.动态可以在运行时声明.您将这两种类型的广播组合在一个广播中.

要声明一个简单的动态广播,您可以使用以下代码(基于您的代码).当显示活动时,它将只显示Toast消息.

  1. import android.app.Activity;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.IntentFilter;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. import android.view.View;
  9. import android.widget.Toast;
  10.  
  11. public class BroadcastTestActivity extends Activity {
  12.  
  13. public static String BROADCAST_ACTION =
  14. "com.unitedcoders.android.broadcasttest.SHOWTOAST";
  15. BroadcastReceiver br = new BroadcastReceiver() {
  16.  
  17. @Override
  18. public void onReceive(Context context,Intent intent) {
  19. Log.w("Check","Inside On Receiver");
  20. Toast.makeText(getApplicationContext(),Toast.LENGTH_SHORT).show();
  21. }
  22. };
  23.  
  24. @Override
  25. public void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.main);
  28. IntentFilter filter = new IntentFilter();
  29. filter.addAction(BROADCAST_ACTION);
  30. filter.addCategory(Intent.CATEGORY_DEFAULT);
  31. registerReceiver(br,filter);
  32. }
  33.  
  34. @Override
  35. protected void onResume() {
  36. super.onResume();
  37. sendBroadcast();
  38. }
  39.  
  40. @Override
  41. protected void onPause() {
  42. super.onPause();
  43. unregisterReceiver(br);
  44. }
  45.  
  46. public void sendBroadcast() {
  47. Intent broadcast = new Intent();
  48. broadcast.setAction(BROADCAST_ACTION);
  49. broadcast.addCategory(Intent.CATEGORY_DEFAULT);
  50. sendBroadcast(broadcast);
  51. }
  52. }

所以现在不用显示吐司就可以调用你的新活动.以下操作取决于您的需求(您想要做什么).

猜你在找的Android相关文章