【问题标题】:Broadcast Receiver not working immediately after package installation安装包后广播接收器无法立即工作
【发布时间】:2011-07-02 11:14:40
【问题描述】:

我目前正在开发一个使用广播接收器接收 BOOT_COMPLETED 操作的应用程序。接收器静态注册在 AndroidManifest.xml 中。

它适用于 android 2.2 但不是 3.1 安装后的下一次启动。在 3.1 中,我必须在启动时广播接收器获得 BOOT_COMPLETED 操作之前启动应用程序一次。

我怀疑 3.1 中的某些更改导致我的接收器在应用程序启动一次之前处于非活动状态。

有没有人以前见过这种情况或知道如何阻止这种行为?任何帮助将不胜感激。谢谢,汤姆。

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.receiver"
    android:versionCode="1"
    android:versionName="1.0">
  <uses-sdk android:minSdkVersion="8" />
  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  <application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name">
    <activity android:name=".MainActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name="TestReceiver" android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
  </application>
</manifest>

TestReceiver.java:

package com.test.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class TestReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    Log.i("TestReceiver", "onReceive() was called");    
  }
}

MainActivity.java:

package com.test.receiver;
import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  }
}

【问题讨论】:

  • 您可以尝试将 targetSdkVersion 添加到 11 或 12。我知道 Android 在新 sdk 设备上使用旧 sdk 应用程序时会使用兼容性代码。 targetSdkVersion 所做的只是说您已经通过特定 API 进行了测试,因此 Android 可以删除兼容性代码并在较新的 sdk 上完全运行应用程序。
  • Spidy,我已经尝试了 8、9、10、11 和 12。该应用在 3.1 中的行为仍然相同。感谢您的意见。

标签: android broadcastreceiver


【解决方案1】:

我发现这是 3.1 中的一项政策更改。应用在安装后一直处于非活动状态,直到用户第一次启动它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    相关资源
    最近更新 更多