在一个应用中可能需要用到其他应用提供的服务,这时可以使用隐式的方式启动服务,但是对于不同的Android版本,隐式启动的方式也略有限制
介绍两种隐式启动Service的方法
方法一:
Intent intent = new Intent();
ComponentName componentName = new ComponentName("com.example", "com.example.TestService");
intent.setComponent(componentName);
startService(intent); 或 bindService(intent, connection, BIND_AUTO_CREATE)
这种方法,Android 11 也可以正常启动
方法二:
Intent callService = new Intent();
callService.setPackage("com.example.test");
callService.setAction("com.example.test.RemoteService");
bindService(callService, serviceConnection, BIND_AUTO_CREATE); 或 startService(callService);
这种方法在Android 10(包含)之前是可以正常的启动或绑定Service的,但是如果Android版本>=11的话,使用这种方式无法正确启动Service,而且没有任何报错信息!(麻了)
在Android 11及以上的版本想使用这种方式启动的话,需要在提供服务的一方的清单文件中添加:
<queries>
<package android:name="调用服务一方的包名"></package>
</queries>
如此方法二在Android11也可以正常运行。
|