在清单中还是直接在 Java 代码中?我尝试在manifest中注册一个ACTION_POWER_CONNECTED但它不起作用,然后我发现这个接收器只能在Java代码中注册,那么注册接收器的最佳方法是什么?
问问题
72 次
3 回答
1
如果应用程序未运行以确保接收到广播,则在清单中注册的接收器将创建一个单独的进程。在活动或服务中注册的接收器与活动/服务生命周期相关联,您还需要确保取消注册它们。是否使用其中一个取决于应用程序是否需要在每次发生时接收广播,或者仅在应用程序运行时接收广播。
于 2013-10-27T15:16:38.607 回答
0
您应该看到这篇文章: 如何在启动时启动应用程序?
添加以体现这一点:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
像这样在清单中定义服务:
<service android:name=".MyService" android:label="My Service">
<intent-filter>
<action android:name="com.myapp.MyService" />
</intent-filter>
现在用这个创建一个新类:
public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Intent serviceIntent = new Intent(YourMainActivity);
context.startService(serviceIntent);
}
}
}
于 2013-10-27T15:14:03.893 回答
0
由于 Honeycomb,除非应用程序至少运行一次,否则在清单中注册的广播接收器不会触发。这是为了防止恶意软件,因此用户必须明确授予应用程序权限。显然,如果您在代码中注册它,那么就不存在这样的问题,因为应用程序将运行。
于 2013-10-27T15:16:56.233 回答