2

我试图使用BroadcastReceiverService将位置数据更新到Web数据库。Android 3.1+中的BroadcastReceiver问题

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

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

这里是我的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

由于机器人3,在一个应用中的所有组件被从运行(接收广播),直到应用程序明确地由用户启动防止。

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

这里描述的问题AOSP问题,

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

注意到,它的封闭, “按预期工作”。这在技术上是一种安全修复。应用程序可以利用TIMER_TICK等一些广为人知的广播意图自行启动,而无需用户运行应用程序或知道该应用程序正在运行。

+0

“现在你的应用程序应该能够从那时开始接收意图” - 或者直到用户强制 - 从设置中停止应用程序,此时您将回滚到与首次安装后相同的状态。 – CommonsWare 2012-07-31 17:19:29