Android 广播接收机内部活动

Android 广播接收机内部活动,android,service,Android,Service,大家好,我如何在从服务接收意图以及int和string类型的参数的活动中实现广播接收器 更新: 我在活动中有以下内容: private BroadcastReceiver ReceivefrmSERVICE = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "IN DA Bro

大家好,我如何在从服务接收意图以及int和string类型的参数的活动中实现广播接收器

更新:

我在活动中有以下内容:

 private BroadcastReceiver ReceivefrmSERVICE = new BroadcastReceiver(){

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

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

    }

   };
我在服务中的一个函数下有这个函数,当选中一个checked按钮时,该函数在另一个活动的事件上调用:

 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);*/
    }
但是它崩溃了,怎么办

 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);
}


}
在onResume中:(因此您仅在前台接收)

在onPause中:(try-catch是修复unregister中的bug,以防调用两次)


如果该服务是您的,并且您还希望确保该活动实际处于活动状态,最好是从服务开始活动,并在活动中处理onNewIntent事件,以处理活动已处于活动状态的情况。实际上,我不会让活动处于活动状态,但仍希望使用其功能?如果我只执行onReceive(),这可能吗?因此,您的问题方向错误,您应该编写一个扩展BradCastReceiver的类,并将其注册到应用程序清单中。如果活动不在前台,那么android可能会在任何时候杀死它,而你根本无法确保你的接收者会被调用。当然,您可以在onCreate中注册,在OnDestroy中注销,但问题是,如果我使用BroadcastRec形成一个单独的类。扩展它之后,我将无法访问活动下的函数。基本上,粘贴的两段代码彼此不相关,也不会形成逻辑通信。您需要决定是否要创建一个intent和startActivity(intent),在这种情况下,您需要在活动中实现onCreate和onNewIntent来处理intent信息。或者您希望使用广播系统,然后使用sendBroadcast发送意向(意向);在这个链接中看一看他是如何发送广播意图的:如果它崩溃了,请至少添加一个例外。我用sendBroadcast代替了错误的startActivity(),现在没有例外,没有崩溃,但现在我将检查这个东西是否正常工作!实际上,我想传递一个变量,然后使用活动下嵌入的函数!在广播接收器中更新Toast未运行,因此表示未接收广播,对吗?是否使用registerReceiver函数注册接收器?看看我原来的答案。您确定您的活动确实存在吗?(请参阅我的第一条评论)很抱歉,我留下了这条评论,但我应该在这里放置Intentfilter>>Intentfilter filter=newintentfilter();就在听筒下面?还有一件事我不确定我必须在.addAction中作为参数传递什么?
BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {         
       // DO YOUR STUFF
    }
}

IntentFilter filter = new IntentFilter();
filter.addAction(/* the action you want to receive */);
registerReceiver(receiver, filter);
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;
    }
}