2012-12-14 163 views
2

嗨伙计我怎样才能实现一个广播接收器在一个活动,从一个服务接收意图连同一些参数的int和字符串类型?广播内部活动接收器

UPDATE:

我有这样的活动下:

private BroadcastReceiver ReceivefrmSERVICE = new BroadcastReceiver(){ 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Toast.makeText(context, "IN DA BroadCASTER", 
       Toast.LENGTH_LONG).show(); 

    } 

    }; 

,我有这个服务中的功能是从另一个活动的事件调用时选中的按钮是下检查:

public void switchSpeaker(int hr, int min){ 

     Toast.makeText(Server.this, hr +" , " +min, Toast.LENGTH_LONG).show(); 

     Intent intent = new Intent(this, andRHOME.class); 
     //intent.putExtra("sendMessage","1"); 
     startActivity(intent); 
     /*PendingIntent pi = PendingIntent.getService(Server.this, 0, myIntent, 0); 
     AlarmManager almmgr = (AlarmManager) getSystemService(ALARM_SERVICE); 
     Calendar cldr = Calendar.getInstance(); 
     int min1 = cldr.get(Calendar.MINUTE); 
     cldr.setTimeInMillis(System.currentTimeMillis()); 
     cldr.add(Calendar.SECOND, 30); 
     almmgr.set(AlarmManager.RTC_WAKEUP, cldr.getTimeInMillis(), pi);*/ 
    } 

但它的崩溃? ,该怎么办?

+0

基本上,您粘贴的两段代码彼此不相关,也不构成逻辑通信。您需要决定是否要制作intent和startActivity(intent),在这种情况下,您需要在活动中实现onCreate和onNewIntent以处理意图信息。 或者你想使用广播系统,然后用sendBroadcast发送意图(intent); – Raanan

+0

看看他如何发送广播意图链接: http://thinkandroid.wordpress.com/2010/02/02/custom-intents-and-broadcasting-with-receivers/ 如果它是崩溃,请至少添加例外。 – Raanan

+0

我用sendBroadcast代替了错误的startActivity()现在没有异常没有崩溃但现在我会检查这个东西是否按照想要的那样工作!实际上我想传递一个变量,然后使用嵌入在Activity下的函数! **广播员接收器中的更新** Toast未运行,因此意味着没有收到广播,我是否正确? – Naaz

回答

9
BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) {   
     // DO YOUR STUFF 
    } 
} 

IntentFilter filter = new IntentFilter(); 

中的onResume:(所以你只接收而在前台)

filter.addAction(/* the action you want to receive */); 
registerReceiver(receiver, filter); 
中的onPause

:(在尝试捕捉是修复在注销错误的情况下,它被称为两次)

try { 
    unregisterReceiver(receiver); 
} catch (IllegalArgumentException e) { 
    if (e.getMessage().contains("Receiver not registered")) { 
     // Ignore this exception. This is exactly what is desired 
     Log.w(TAG,"Tried to unregister the reciver when it's not registered"); 
    } else { 
     // unexpected, re-throw 
     throw e; 
    } 
} 
+0

如果服务是您的,并且您还希望确保活动实际上处于活动状态,那么最好从服务开始您的活动,并在活动中处理onNewIntent事件,以处理活动的情况已经有效。 – Raanan

+0

其实我不会有活动活动,但仍然想使用它的功能?这是可能的,如果我只有onReceive()? – Naaz

+0

所以你的问题是在错误的方向,你应该做的就是编写一个扩展BradcastReciver的类并将它注册到你的应用清单中。所以它处理这个动作。 – Raanan

0
public class myActivity extends Activity { 

    private BroadcastReceiver receiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(), "Message", Toast.LENGTH_SHORT); 

     } 
    }; 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
} 


}