当前位置: 首页 > 知识库问答 >
问题:

如何将注册ID从广播接收器中的GCM发送到主活动

农鸿达
2023-03-14

我是Android开发人员开发一个应用程序。在这里,我从GCM获得注册ID并将其保存在字符串中,现在我想将此注册ID从广播接收器类发送到我的主活动类,以便我可以将此值发送到我的服务器。我试图使用意图,但武力关闭总是发生。

GcmBroadcastreceiver的代码。班级是

公共void onReceive(上下文、意图){

        String action=intent.getAction();
        Log.d("msg", action);

    if(action.equals("com.google.android.c2dm.intent.REGISTRATION"))
        {

            Log.d("msg", "within if loop");

            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                Set<String> keys = bundle.keySet();
                Iterator<String> it = keys.iterator();
                Log.d("msg","Dumping Intent start");
                while (it.hasNext()) {
                    String key = it.next();
                //    Log.d("msg","[" + key + "=" + bundle.get(key)+"]");
              Toast.makeText(context,("msg"+"[" + key + "=" + bundle.get(key)+"]"), Toast.LENGTH_LONG).show();
                }
                Log.d("msg","Dumping Intent end");

            }
            String registrationId=intent.getStringExtra("registration_id");
            Toast.makeText(context, "reg is"+registrationId, Toast.LENGTH_LONG).show();

            Intent in=new Intent(context,MainActivity.class);
            in.putExtra("RegID", registrationId);
            context.startActivity(in);
            Toast.makeText(context, "Intent is send to mainactivity class", Toast.LENGTH_LONG).show();



         //   Log.d("regid", registrationId);
            String error=intent.getStringExtra("error");
            //Log.d("error", error);
            String unregistered=intent.getStringExtra("unregistered");
        //  Log.d("unregistered", unregistered);
        }

        else if(action.equals("com.google.android.c2dm.intent.RECEIVE"))
        {
            String data1=intent.getStringExtra("data1");
            Log.d("data1::",data1);
            String data2=intent.getStringExtra("data2");
            Log.d("data2::",data2);
        }

共有3个答案

曹涵润
2023-03-14

你必须在你的活动中创建另一个广播接收器,并把你的数据作为额外的。

云长恨
2023-03-14

我更喜欢的简单方法是将您的意图注册到活动中,在android清单中将该活动的属性启动模式设置为single task true,并在“on new intent”中的活动中处理该意图。现在,您需要做的唯一一件事是从广播接收器调用该意图,并使用希望发送给activity的内容在activity的on new intent方法中处理它。

彭衡
2023-03-14

在主要活动中,创建一个BroadcastReceiver,如下所示:

private BroadcastReceiver mReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        //post registration id to server
    }
};

在活动的onCreate中将此接收器注册为:

registerReceiver(mReceiver, new IntentFilter("your_package_name.REGISTER_DEVICE"));

在活动的onDestroy()中,注销接收者:

if (mReceiver != null) {
    unregisterReceiver(mReceiver);
}

获得注册id后,您可以通过以下方式向您发送主要活动的广播:

context.sendBroadcast(new Intent("your_package_name.REGISTER_DEVICE").putExtra("GCM_REG_ID", registrationId));

或者,您也可以使用LocalBroadcastManager;

 类似资料:
  • 我在一个独立于主活动的文件中注册了一个广类型接收器,并且基于在广类型接收器中接收到的通知,我想在主活动中执行一些操作。 我的问题是,将通知从广播接收器传递到主活动的推荐方式是什么?是否应该在iam在广播接收器文件中注册的每个操作中创建一个公共方法?或者应该使用将在主活动中实现的接口。 注:广泛的演员接受者登记为7个行动

  • 我是android新手。我的项目有一个活动和一个服务。我的服务有一个广播接收器,而活动有一个广播发送器,它在PeriodSender方法中。动态地,当我注册接收者时,在服务开始时它不会调用,但是如果我在几分钟后发送了一些东西,它就会调用。但是我想在清单中注册它,我已经在清单中包含了接收方的详细信息,但是接收方没有调用。我的接收方类名是MyReceiver21,意图操作是My_ACTION1。实际上

  • 我有一个broadcastreciever开始了一个长的操作(上传过程)。在一个从活动类开始的服务的代码中,我需要在一个新线程中注册这个接收器。 我已经检查了这篇文章Android的广播接收器是在一个新的线程中启动的吗?但是我需要一个关于使用Context.RegisterReceiver的更具体的示例(BroadcastReceiver receiver、IntentFilter filter、

  • 我对Android的服务有点“问题”。关键是,每次我请求注册id时,服务器都会返回不同的注册id。最糟糕的是,在进行测试后,旧的和新的都正常工作!!(我向老用户和新用户发送推送消息,我的应用程序正在接收来自每一个用户的推送!!)。 这是我正在使用Android服务器中的寄存器: 我不知道我做错了什么,但是,这已经发生在我身上两个月了(或多或少)。在我从来没有遇到过这个问题之前,服务器通常会返回相同

  • 我正在尝试执行一个相对简单的任务:我有一个片段,它启动一个服务,从远程服务器拉出一些JSON。然后,我想使用broadcast将JSON传递回原来的调用片段,其中BroadcastReceiver在片段中定义为匿名类。 然而,每当我尝试这样做时,我总是得到以下错误: 下面是该服务的代码: 我尝试了很多不同的方法:通过intent只发送原始JSON字符串,将广播接收器定义为一个单独的类,将JSON转

  • 我目前正在使用SharedReferences跟踪通过AlarmManager启动的BroadcastReceiver中要执行工作的项列表。除了一个特定的场景外,一切都很好。当我触发一个新项目来执行工作时,让它完成工作,然后删除该项目(全部通过SharedReferences编辑),它在应用程序运行时工作得很好。当列表中没有任何内容,我打开任务管理器并终止应用程序时,该项突然出现在Broadcas