我正在尝试使用 BroadcastReceiver
和 Service
将位置数据更新到 Web 数据库。
但是我在 Galaxy Tab 7.0 Plus 上使用 Android 3.2 时遇到了困难。
同一应用程序在 Android 2.3.6 Galaxy Note 上运行良好,但无法在平板电脑上运行。事实上,我将 RECEIVE_BOOT
Intent 操作添加到我的接收器,但它永远不会被实例化,也就是说,onReceive()
永远不会在启动完成后被调用。我想知道是否有任何系统更新导致此操作。
这是我的 xml 和接收器类:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tests.bootreceiver"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<receiver
android:name=".BootUpReceiver"
android:enabled="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<service android:name=".MyService" >
</service>
</application>
BootUpReceiver.java
public class BootUpReceiver extends BroadcastReceiver {
private static int INTERVAL = 1000*15;
@Override
public void onReceive(Context context, Intent intent) {
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, MyService.class), PendingIntent.FLAG_UPDATE_CURRENT);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), INTERVAL, pi);
}
是否存在同一段代码在一个系统中工作而在另一个系统中不工作的原因?
谢谢!
最佳答案
自 android 3 起,应用程序中的所有组件都无法运行(接收广播),直到用户明确启动该应用程序。
要测试这是否是您的问题,请向您的应用程序添加一个虚拟 Activity 并启动它。现在您的应用程序应该能够从那时起接收 Intent (即使在重新启动后)。
这是描述问题的 AOSP 问题,
请注意,它已关闭为“按预期工作”。这在技术上是一个安全修复程序。应用程序可以利用某些众所周知的广播 Intent (例如 TIMER_TICK
)在用户从未运行该应用程序或不知道该应用程序正在运行的情况下自行启动。
关于android - Android 3.1+ 中的 BroadcastReceiver 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11744426/