我可以通过这种方式从BroadcastReceiver调用一个Activity:
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是否调用了Activity?
我还尝试通过i.putExtra("foo", "bar")
填充BroadcastReceiver上的Intent with Extras。我无法通过在活动中调用MyActivity.getIntent().getExtras().get("foo")
来阅读它。
希望有人能帮助我解决这个问题,非常感谢你!
答案 0 :(得分:2)
你可以在你的意图中发送额外内容并在onceceive上检查它们,但这样做的正确方法是为“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
这样可行,因为当没有额外的“STARTED_BY_RECEIVER”时,getBoolean方法会返回false,这样你只需将标志放在一个地方(由接收者启动)
另外不要忘记将“STARTED_BY_RECEIVER”置于静态变量中并在两个地方使用它!
答案 1 :(得分:0)
广播接收器无法通过附加功能 http://developer.android.com/reference/android/content/BroadcastReceiver.html
你可以尝试反向操作,打开活动的用户操作将布尔值设置为true作为默认值,你可以检查
boolean userStarted = getIntent().getExtras().getBoolean('userStarted', false);