我有一个非常简单的 IntentReceiver 来在时间变化时接收事件。这是代码:
public class IntentRec extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("IntentRec", intent.getAction());
}
}
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<receiver android:name=".IntentRec">
<intent-filter>
<action android:name="android.intent.action.TIME_SET"/>
</intent-filter>
</receiver>
<activity android:name="MyActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
但是,我在应用程序运行时收到意图。但如果我关闭(使用强制关闭)应用程序,则不会调用 onReceive。所以我的问题是,只有当侦听器应用程序运行时我才会收到意图吗?我认为意图是为了在应用程序未运行时运行目标侦听器类而设计的。
Thanks
解决方案很简单:停止单击“强制关闭”。
在 Android 3.1+ 上,强制关闭将阻止应用程序中的任何内容再次运行,直到用户手动运行您的 Activity 或其他内容(例如第三方应用程序)启动您的应用程序。
UPDATE
我怀疑您对“停止”一词的多种含义感到困惑。让我们来看看这个过程,避免使用“停止”这个词,看看它是否有帮助。
当您的应用程序首次安装在 Android 设备上时,会处于一种被某些人称为“snicklefritzed”的状态。当应用程序处于“snicklefritzed”状态时,没有清单注册BroadcastReceiver
将工作。要将应用程序移出“snicklefritzed”状态,某些第三方应用程序(例如主屏幕启动器)必须明确请求在应用程序中运行某些内容(例如 Activity)。因此,正常的事件过程是用户下载您的应用程序,单击其启动器图标,然后您的应用程序将进入“正常”状态并远离“snickelfritzed”状态。在“正常”状态下,您的BroadcastReceiver
会工作得很好。
让我们假设你的BroadcastReceiver
是为了ACTION_BOOT_COMPLETED
播送。 “snicklefritzed”状态与您的应用程序当前是否正在运行无关——它仅取决于您的应用程序是否已运行ever跑还是不跑。因此,如果用户安装了您的应用程序,但在对您的应用程序执行任何操作之前重新启动了手机,您的ACTION_BOOT_COMPLETED
接收者将not在启动时获得控制。但是,如果用户在您的应用程序中运行某些内容,then重启手机,您的接收器将收到ACTION_BOOT_COMPLETED
正常播出。
通常,应用程序会退出“snicklefritzed”状态,并且永远不会返回到该状态。一件事是will如果用户在“设置”中单击该应用程序的“强制关闭”,则会导致该应用程序再次“崩溃”。在这里,用户明确告诉 Android 您的应用程序行为不当,不应再次运行,除非用户另有说明。当然,如果用户再次启动您的活动,您将返回到“正常”状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)