我正在尝试设置一项服务,以检查何时在设备中安装了新的活动更新.我已经在应用程序活动中完成了这项工作,在清单中声明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 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);