Android-сервис подключается? - PullRequest
       24

Android-сервис подключается?

0 голосов
/ 16 декабря 2010

Когда моя деятельность запускается, она создает службу, которая действует как сервер. Сервер получает необработанные данные из моего скрипта Python на моем рабочем столе. Служба создает и поддерживает DataManager, который обрабатывает все данные из моего скрипта python в хэш-карте, привязанной к имени DM. В любой момент времени мне нужно, чтобы действие связывалось с запросом сервиса на некоторые данные из сервиса и процесса, когда действие приостанавливается, останавливается или уничтожается, оно отменяется.

Я считаю, что привязка верна, но когда я запускаю службу, переданное ServiceConnection всегда возвращается нулевым. Есть идеи, что происходит? мой код был украден прямо из класса RemoteService из Android Спасибо ~ Аэдона

{Кодовое приложение}

Деятельность HomeScreen, которая связана с PublicService

@Override public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    doBindService();
    setContentView(R.layout.homescreen);
    initView();
}

public void initView() {
    workbenchs = (Gallery)findViewById(R.id.workbenchs);
    workbenchs.setMinimumHeight(h/4);
    workbenchs.setAdapter(new WorkBenchAdapter(this));
    workbenchs.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            Intent it = new Intent(HomeScreen.this, Controller.class);
            it.putExtra("workbench", arg2);
            startActivity(it);
        }
    });
}

 // Gallery Adapter

public class WorkBenchAdapter extends BaseAdapter {
    public WorkBenchAdapter(Context c) {   }
    public int getCount() {return mBoundService.getNumBenchs();}
    public Object getItem(int position) {return position;}
    public long getItemId(int position) {return position;}

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView i = new ImageView(HomeScreen.this);
    i.setImageBitmap(mBoundService.getWorkbench(position).toBitmap());
        i.setLayoutParams(new Gallery.LayoutParams(w/4, h/4));
        return i;
    }
}


 // Service Necessities

public boolean mIsBound = false;
private PublicService mBoundService;
private ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName className, IBinder service) {
        mBoundService = ((PublicService.LocalBinder)service).getService();
    }

    public void onServiceDisconnected(ComponentName className) {
        mBoundService = null;
    }
};

void doBindService() {
    Log.d(TAG, "Binding...");
    bindService(new Intent(this, PublicService.class), mConnection, Context.BIND_AUTO_CREATE);
    mIsBound = true;
    Log.d(TAG, "Bound.");
}

void doUnbindService() {
    if (mIsBound) {
        Log.d(TAG, "Unbinding...");
        unbindService(mConnection);
        mIsBound = false;
        Log.d(TAG, "Unbound."); 
    }
}

Моя проблема связана с адаптером Workbench. Когда адаптер создан, он вызывает get count (который начинается с 0), но он постоянно говорит, что mBoundService имеет значение null. Я попытался запустить службу до привязки, и это ничего не меняет ...

1 Ответ

2 голосов
/ 16 декабря 2010

Вы указали метку обслуживания в своем манифесте?

В <application> вам необходимо указать такую ​​услугу, как эта <service android:name="namespace.ServiceName"/>

...