2011-12-21 59 views
1

开始从广播接收器的活动我可以用这种方式调用从广播接收器的活动:与结果

public class AlarmReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     try { 
      Intent i = new Intent(context, MyActivity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(i); 

      Log.v(TAG, "alarm triggered"); 
     } catch (Exception e) { 
      Log.v(TAG, e.toString()); 
     } 
    } 
} 

这带来的应用前端和活动要求onResume()。我的问题是我无法确定BroadcastReceiver是否将我带到onResume(),或者只是用户本身手动。有什么方法可以确保BroadcastReceiver称为活动?

我还尝试通过执行i.putExtra("foo", "bar")来使用Extras以BroadcastReceiver填充意向。我无法通过在Activity上调用MyActivity.getIntent().getExtras().get("foo")来读出它。

希望有人能帮助我解决这个问题,非常感谢!

回答

2

你可以在你的意图中发送额外的内容并检查它们是否接收,但是正确的做法是为“STARTED_BY_RECEIVER”设置一个布尔值;

开始活动时,将第三行放入onReceive回调方法中;

Intent i = new Intent(context, MyActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
i.putExtra("STARTED_BY_RECEIVER", true); 
context.startActivity(i); 

然后在活动的onCreate,你可以检查这是否是由这样的广播接收机启动;

if(getIntent().getExtras() != null && getIntent().getExtras().getBoolean("STARTED_BY_RECEIVER")){ 
    // The activity was started by the receiver 
} 
else{ 
    // The activity was started by user 

这工作,因为GetBoolean方法将返回false时,有没有额外的所谓“STARTED_BY_RECEIVER”,这样你只需要把国旗在一个地方(由接收器启动)

也不要忘了把“STARTED_BY_RECEIVER”放在一个静态变量中,然后在两个地方使用它!

+0

将“STARTED_BY_RECEIVER”放入一个静态变量并在两个地方使用它意味着什么?由于看到没有变量STARTED_BY_RECEIVER,我可以像正常的方式检查像'STARTED_BY_RECEIVER == true;'这不适合我,我做了你所说的一切,但“静态变量”的东西。 'if(getIntent()。getExtras()!= null && getIntent()。getExtras()。getBoolean(“STARTED_BY_RECEIVER”))'虽然我没有'i.putExtra(“STARTED_BY_RECEIVER”,true)'in我的BroacastReceiver。 – arminb 2011-12-22 01:07:54

+0

好吧忘了静态的东西..你把if()放在onCreate的右边?如果它是从接收方调用的,它将是真的,所以if语句将运行,如果用户调用,那么其他语句将运行,因为在那里不会有额外的(“STARTED_BY_RECEIVER”)。现在,您需要尽可能彻底正如我在我的回答中告诉我什么没有工作,只是说“这不适合我” – 2011-12-22 14:24:31

+0

在我的BroadcastReceiver的'onReceive()'方法中,我设置了'i.putExtra (“STARTED_BY_RECEIVER”,true);'在我通过context.startActivity(i)'开始活动之前。在我的Activity中,我将'if(getIntent()。getExtras()!= null && getIntent()。getExtras()。getBoolean(“STARTED_BY_RECEIVER”))'放入我的'onCreate()'方法中,但if子句永不放弃成真。 这就是我所做的,抱歉不适合,并感谢您的参与。 – arminb 2011-12-22 14:52:32

0

广播接收机不能传递额外 http://developer.android.com/reference/android/content/BroadcastReceiver.html

你可以尝试做反向不过,有开放活动的用户动作传递一个布尔值设置为true为默认值,你可以检查

boolean userStarted = getIntent().getExtras().getBoolean('userStarted', false); 
+0

但是我应该在哪里设置userStarted?我需要一些可以确保用户恢复活动而不是BroadcastReceiver的情况。反过来也是同样的问题。 – arminb 2011-12-21 21:42:24