Все еще не может привязать к моей службе Android

Я совершенно новичок в Android и портирую программу на C# на Android. В большинстве случаев все идет хорошо, но у меня есть длительная проблема, связанная с невозможностью привязки к одному из моих сервисов. Я хотел запустить и привязать к сервису, чтобы получить sendBroadcast (намерение) от сервиса. Намерение включает в себя пакет данных для отображения в пользовательском интерфейсе с использованием sendBroadcast (намерение), но он возвращает нулевой указатель, предположительно, потому что он не подключен к действию должным образом. Я следовал очень многим учебным пособиям, включая предложения на этом сайте, которые казались довольно логичными и, по сообщениям, работали. Например, 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 / основы-о-андроида-части-III-андроид-услуги /

Похоже, ошибка заключается в том, что служба не запускается должным образом... см. Трассировку стека ниже: ActivityThread.handleCreateService(ActivityThread$CreateServiceData) строка: 2943 Служба пуста. onCreate или onStartCommand() не вызывают в службе.

К сожалению, я не могу использовать обработчики для этого, потому что конструктор класса Service не вызывается из действия. Как вы можете видеть, я много чего пробовал и много читал, но, очевидно, я все еще что-то упускаю. Я дам вам, какая версия кода, которую я сейчас пробую, создала трассировку стека выше. Этот код не учитывает действия oncreate()! НО bool tmp из bindservice() возвращает 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;
    }
};

XML-файл манифеста активности со службой

        <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 (отдельный класс) взят из другого урока и

    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, но происходит сбой сразу после выхода из onCreate() действия. Текст ошибки находится во введении выше.

1 ответ

Решение

Много кода, чтобы посмотреть через, но у меня есть предположение:

Попробуйте удалить это:

CuIntent.setAction(".Core.CURVE_SERVICE");

И фильтр намерений отсюда:

<service android:name=".Core.Curve">
<intent-filter>
    <action android:name=".Core.CURVE_SERVICE"></action>
</intent-filter>
</service>
Другие вопросы по тегам