我有一个带有集成条形码扫描仪的Android设备。我正在按如下方式设置服务:
public class BarcodeService extends Service {
private final LocalBinder binder = new LocalBinder();
public class LocalBinder extends Binder {
public BarcodeService getService() {
return BarcodeService.this;
}
}
@Override
public IBinder onBind(Intent arg0) {
return binder;
}
@Override
public void onCreate() {
super.onCreate();
HandlerThread thread = new HandlerThread("ServiceStartArguments");
thread.start();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//Get scanner
}
}
该服务也在AndroidManifest.xml
。使用此服务的类是:
public class BarcodeReader extends Activity {
private BarcodeService barcodeService;
private boolean isBound = false;
private ServiceConnection barcodeServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
barcodeService = ((BarcodeService.LocalBinder)service).getService();
isBound = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
barcodeService = null;
isBound = false;
}
};
@Override
protected void onStart() {
super.onStart();
if (!isBound) {
Intent intent = new Intent(this, BarcodeService.class);
startService(intent);
bindService(intent, barcodeServiceConnection, Context.BIND_AUTO_CREATE);
}
}
@Override
protected void onStop() {
super.onStop();
if (isBound) {
unbindService(barcodeServiceConnection);
}
}
}
然而,服务没有约束力,即。 barcodeService
始终为空。代码永远不会达到onServiceConnected
。
我错过了什么?是否有必要使用扩展Activity的类?
答案 0 :(得分:1)
只是一些通用的评论和内容,以检查您的服务是否未启动。
常见的错误不是让清单中的服务(android没有警告你)或者在那里有服务但是拼错了类名。
<manifest ... >
...
<application ... >
<service android:name=".ExampleService" />
...
</application>
</manifest>
或者你可能在清单(或其中一个清单)中有它,但是在apk中使用的合并之后的最终清单没有服务定义。对于那个检查:
project_folder/app_folder/build/intermediates/manifests/full/...
项目清理和重建可能会有所帮助。
调试时检查bindService
调用的布尔返回值,看看服务是否成功启动。
此外,该服务可能正在运行但未绑定或可能未执行任何操作,因此没有视觉效果它在后台运行。为此,在绑定的Activity
和Service
本身上使用调试器。
检查onBind
班级中的onStartCommand
,Service
,或者检查那里的onCreate
。
在Activity
检查bindService
,ServiceConnection
等等。
还要检查https://developer.android.com/guide/components/services.html