2

我正在尝试使用BroadcastReceiver和将位置数据更新到 Web 数据库Service

但是,我很难在 Galaxy Tab 7.0 Plus 上使用 Android 3.2。

相同的应用程序在 Android 2.3.6 Galaxy Note 上运行良好,但不能在平板电脑上运行。事实上,我将RECEIVE_BOOT意图操作添加到我的接收器,但它永远不会被实例化,也就是说,nReceive()在启动完成后永远不会调用 o。我想知道系统是否有任何更新导致此操作。

这是我的 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);
}

}

有没有理由让同一段代码在一个系统中工作而在另一个系统上不起作用?

谢谢!

4

2 回答 2

4

从 android 3 开始,应用程序中的所有组件都将被阻止运行(接收广播),直到用户明确启动应用程序。

要测试这是否是您的问题,请向您的应用程序添加一个虚拟活动并启动它。现在您的应用程序应该能够从那时起接收意图(即使在重新启动后)。

这是描述问题的AOSP问题,

http://code.google.com/p/android/issues/detail?id=18225

请注意,它已关闭为“按预期工作”。这在技术上是一个安全修复。应用程序可以利用某些众所周知的广播意图,例如TIMER_TICK在用户运行应用程序或知道应用程序正在运行的情况下自行启动。

于 2012-07-31T16:11:35.657 回答
2

看看这个: 引导完成问题

于 2012-07-31T16:11:08.500 回答