【问题标题】:Broadcast Receiver is not receiveing the intent data in android.Looking for SolutionBroadcast Receiver在android中没有接收到intent数据。寻找解决办法
【发布时间】:2016-02-25 12:08:51
【问题描述】:

我正在尝试将意图数据发送到MainActivity。我正在从GCM Server 接收数据,我想将接收到的数据发送到我的MainActivity

在 GcmBroadcastReceiver 类中

    ComponentName comp = new ComponentName(context.getPackageName(),
      GcmIntentService.class.getName());
    startWakefulService(context, (intent.setComponent(comp)));
    setResultCode(Activity.RESULT_OK);

    Bundle extras = intent.getExtras();
    Intent i = new Intent("CHAT_MESSAGE_RECEIVED");
    i.putExtra("Message", extras.getString("Message"));
    i.putExtra("Sender",extras.getString("Sender"));
    i.putExtra("Receiver",extras.getString("Receiver"));
    i.putExtra("Calltype",extras.getString("calltype"));
    context.sendBroadcast(i);

我使用上面的这些代码从GCM Sever 接收数据,并使用BroadcastReceiver 发送数据。

在 MainActivity 类中

registerReceiver(broadcastReceiver,newIntentFilter("CHAT_MESSAGE_RECEIVED"));
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override
    public void onReceive(Context context, Intent intent) {           
        Bundle b = intent.getExtras();
        String message = b.getString("Message");
        String sender=b.getString("Sender");
        String receiver=b.getString("Receiver");
    }
};

在活动中,我使用广播接收器来接收带有数据的意图。

【问题讨论】:

  • 在 GCM 广播接收器中:
  • 明确你的问题
  • 没有看到一些代码、崩溃报告或其他更清楚的东西,你不会在这里得到任何帮助......这不是千里眼的论坛......
  • 我正在开发聊天应用程序,如果我会收到来自 GCM 服务器的消息,那么收到的消息我想发送到活动@Jas
  • 请帮帮我,我不知道该怎么做..

标签: android android-fragments android-activity google-cloud-messaging android-broadcastreceiver


【解决方案1】:
In your GcmListenerService # onMessageRecieved() function use this code
 Intent intent = new Intent(ANY_TAG);
        sendBroadcast(intent);

AND in your activity use following code

 private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            displayToast(" Data received");
        }
    };

 @Override
    public void onResume() {
        super.onResume();
        getContext().registerReceiver(mMessageReceiver, new IntentFilter(ANY_TAG));
    }

    @Override
    public void onPause() {
        super.onPause();
        getContext().unregisterReceiver(mMessageReceiver);
    }

【讨论】:

  • 在应用打开时使用它。
  • 抱歉错字。应用打开时尝试
  • 可能缺少一些括号,但它应该可以正常工作,因为我目前正在以相同的方式使用
  • 否。我只在活动中使用广播接收器..那么我如何添加清单文件? @Khizar Hayat
  • 我在询问 GcmListenerService、MyInstanceIDListenerService 和 RegistrationIntentService 的服务标签。以及 com.google.android.gms.gcm.GcmReceiver 的接收者标签
【解决方案2】:

// 使用可观察对象作为接口

public class ObservableObject extends Observable {
private static ObservableObject instance = new ObservableObject();

public static ObservableObject getInstance() {
    return instance;
}

private ObservableObject() {
}

public void updateValue(Object data) {
    synchronized (this) {
        setChanged();
        notifyObservers(data);
    }
}
}

// 主接收器

public class MainReceiver extends        BroadcastReceiver 
 {
public final static String MAINRECEIVERSETALARM="ir.shes.schedule.MainReceiver.setalarm";
public final static String MAINRECEIVERSNOOZE="ir.shes.schedule.MainReceiver.snooze";

@Override
public void onReceive(Context p1, Intent p2)
{

    ObservableObject.getInstance().updateValue(p2);

}


}

// 主活动

public class MainActivity extends Activity implements Observer 
{
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ObservableObject.getInstance().addObserver(this);
}
@Override
public void update(Observable observable, Object data) {        

    String action=((Intent)data).getAction();
    if (action.equals(MainReceiver.MAINRECEIVERSETALARM))
        app.eventCache.setAlarm();
    if (action.equals(MainReceiver.MAINRECEIVERSNOOZE))
        Toast.makeText(this, "snooze", Toast.LENGTH_LONG).show();
}
}

//AndroidManifest.xml中的静态注册接收者

<receiver android:name="ir.shes.schedule.MainReceiver">
        <intent-filter>     

            <action android:name="ir.shes.schedule.MainReceiver.setalarm" />
            <action android:name="ir.shes.schedule.MainReceiver.snooze" />

        </intent-filter>

    </receiver>

【讨论】:

    【解决方案3】:

    想知道您是否在 AndroidManifest.xml 中声明了 BroadcastReceiver。

    <receiver android:name=".YourBroadCastReceiver" />
    

    【讨论】:

    • 没有。我在活动中使用广播接收器。@Dm
    猜你喜欢
    • 2011-03-12
    • 2023-01-10
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多