我对Android很新,我正在将一个C#程序移植到android。大部分情况都不错,但我有一个长时间运行的问题,无法绑定到我的一项服务。 我想要启动并绑定到服务以从服务接收sendBroadcast(intent)。意图包括使用sendBroadcast(intent)在UI中显示的数据包,但返回一个空指针,可能是因为它没有正确连接到活动。 我已经遵循了很多不同的教程,包括本网站上的建议,所有这些建议看起来都很合理,并且据报道是有效的。 如 http://developer.android.com/reference/android/app/Service.html http://devblogs.net/2011/01/04/bind-service-broadcast-receiver/ http://www.androidcompetencycenter.com/2009/01/basics-of-android-part-iii-android-services/仍然无法绑定到我的Android服务
的错误似乎是,该服务没有启动正常......看到以下堆栈跟踪: ActivityThread.handleCreateService(ActivityThread $ CreateServiceData)行:2943 服务为空。 onCreate或onStartCommand()不会在服务中调用。
不幸的是,我不能使用处理程序,因为Service类的构造函数不是从活动调用的。 正如你所看到的,我已经尝试了很多东西,并做了一些认真的阅读,但显然我仍然错过了一些东西。 我会给你什么版本的代码,我目前正在尝试产生上面的堆栈跟踪。这段代码并不会通过create()!上的活动建立起来!但从bindservice()bool tmp返回true?
活性
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(D) Log.e(TAG, "+++ ON CREATE +++");
// Various view initializations here
Intent CuIntent = new Intent(this, Curve.class);
CuIntent.setAction(".Core.CURVE_SERVICE");
startService(CuIntent);
Boolean tmp;
tmp = bindService(CuIntent, CurveServiceConncetion, Context.BIND_AUTO_CREATE);
}
private ServiceConnection CurveServiceConncetion = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
CurveService = ((LocalBinder<Curve>) service).getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
CurveService = null;
}
};
与服务
<application android:label="@string/app_name" android:icon="@drawable/pi_icon_t">
<activity android:label="@string/app_name" android:name=".BTUI" android:finishOnCloseSystemDialogs="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"></action>
<category android:name="android.intent.category.LAUNCHER"></category>
</intent-filter>
</activity>
<service android:name=".Core.Curve" />
</application>
的localBinder类(一个单独的类)活动清单XML文件是从另一个教程取出并是
public class LocalBinder<S> extends Binder {
private String TAG = "LocalBinder";
private WeakReference<S> mService;
public LocalBinder(S service){
mService = new WeakReference<S>(service);
}
public S getService() {
return mService.get();
}
}
服务看起来是这样的
public class Curve extends Service
{
private IBinder mBinder = new LocalBinder<Curve>(this);
@Override
public void onCreate() {
super.onCreate();
String balls = "balls";
Toast.makeText(this, "Curve Service created...", Toast.LENGTH_LONG).show();
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return mBinder;//
}
@Override
public void onStart(Intent intent, int startId) {
String balls = "balls";
Toast.makeText(this, "Curve Service created...", Toast.LENGTH_LONG).show();
}
@Override
public void onDestroy() {
mBinder = null;
}
这个真不能说辛苦,我希望有人能看到,我错了。
编辑我为这篇文章选择了一个坏名字。该绑定返回true,但在离开activity的onCreate()后立即崩溃。错误文本在上面的介绍中。
Knickedi您好,感谢对于你的建议,但杜尔加的答案是一样的,我试过这个:( – user960914
Woops按钮,我已经尝试了很多东西,似乎我的服务没有启动CurveService为空,C由于我在所有地方都停止了分数,所以永远不会输入班级。 – user960914
再次错误的按钮,绑定返回true,如果我使用如下所示的xml代码,但仍然CurveService为空,我的broadcastreceiver引发空指针 – user960914