当前位置 : 主页 > 手机开发 > android >

android – IntentFilter的Intend.ACTION_PACKAGE_REPLACED的BroadcastReceiver无法在服务中运行

来源:互联网 收集:自由互联 发布时间:2021-06-11
我正在尝试设置一项服务,以检查何时在设备中安装了新的活动更新.我已经在应用程序活动中完成了这项工作,在清单中声明Broadcastreceiver并且它完美地工作. 但是,当我尝试在服务中运行
我正在尝试设置一项服务,以检查何时在设备中安装了新的活动更新.我已经在应用程序活动中完成了这项工作,在清单中声明Broadcastreceiver并且它完美地工作.

但是,当我尝试在服务中运行该接收器并动态声明它时,我的onReceive永远不会被调用.这是我的服务代码:

public class UpdateService extends Service {    
 private static String mPackage = "com.my.package";
 private static String mActivityName = "myActivity";
 private BroadcastReceiver mUpdateReceiver; 

 @Override
 public void onCreate() {
  super.onCreate();
  mUpdateReceiver = new BroadcastReceiver() {

   @Override
   public void onReceive(Context context, Intent intent) {
    Log.d("mTag","In the BroadcastReceiver onReceive()");
    if (intent.getAction().equalsIgnoreCase(Intent.ACTION_PACKAGE_REPLACED)) {
     // Log that a new update is has been found
     Log.d("mTag","New version of the app has been installed.");
     Log.d("mTag", "Intent data: " + intent.getDataString());
     Log.d("mTag","My package: " + mPackage);
    }
   }
  };

  Log.d("mTag","In the service onCreate() method.");
  IntentFilter filter = new IntentFilter();
  filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
  filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
  filter.addAction(Intent.ACTION_PACKAGE_ADDED);
  registerReceiver(mUpdateReceiver,filter);
 }

 @Override
 public int onStartCommand(Intent intent, int flags, int startId) {
  Log.d("mTag","UpdateService started");            
  return Service.START_STICKY;
 }

 @Override
 public void onDestroy() {
  super.onDestroy();
  unregisterReceiver(mUpdateReceiver);
  Log.d("mTag","Service destroyed");
 }

 @Override
 public IBinder onBind(Intent arg0) {
  return null;
 }
}

调用服务onCreate(),这告诉我该服务已启动并正在运行.但是,在通过adb安装和替换某些应用程序之后,BroadcastReceiver中的所有日志都没有调用onReceive()方法.

这是我的MainActivity:

public class MainActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  startService(new Intent(this, UpdateService.class));
 }
}

你们有什么想法为什么onReceive()没有被调用?

谢谢.

我将我的代码基于这两个引用:

> BroadcastReceiver within a Service
> How to know Android app upgraded?

您应该将数据模式添加到您的IntentFilter.

IntentFilter filter = new IntentFilter();
  filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
  filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
  filter.addAction(Intent.ACTION_PACKAGE_ADDED);

  filter.addDataScheme("package");

  registerReceiver(mUpdateReceiver,filter);
网友评论