0

在清单中还是直接在 Java 代码中?我尝试在manifest中注册一个ACTION_POWER_CONNECTED但它不起作用,然后我发现这个接收器只能在Java代码中注册,那么注册接收器的最佳方法是什么?

4

3 回答 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 回答