не могу запустить сервис - запуск и уничтожение с помощью флажка (код в сообщении) - PullRequest
0 голосов
/ 09 февраля 2012

Я являюсь нубом из Java, поэтому извините за вопрос о нубе ...

У меня есть флажок, который должен запускать сервис при проверке - убить его, когда не проверено.всплывающее окно «пытаюсь ...» появляется, как и ожидалось, но службы, похоже, не запускаются и не отображают всплывающее окно.

Вот мои основные записи, основной код активности (сокращенный) икод службы:

// manifest entries

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" >
 <activity android:name=".MainMenu" android:label="@string/app_name" >
  <intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
 </activity>
 <service android:name=".PPS" android:process=":remote" android:label="@string/service_name" />
</application>

// MainMenu.java

final CheckBox checkBoxStartService = (CheckBox) findViewById(R.id.checkBoxEnable);
checkBoxStartService.setOnCheckedChangeListener(new OnCheckedChangeListener() 
{
 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
 {
  if (checkBoxStartService.isChecked() == true) 
  {       // make toast
  Toast toaster = Toast.makeText(MainMenu.this, "attempting to start service...", 500);
  toaster.setGravity(Gravity.CENTER, 0, -200);
  toaster.show();
  Intent startPPS = new Intent();
  startPPS.putExtra("com.domain.notlaunchingservice.PPS", false);
  startService(startPPS); 
  }
  if (checkBoxStartService.isChecked() == false)
  {
  Intent closePPS = new Intent();
  closePPS.putExtra("com.domain.notlaunchingservice.PPS", true);
  stopService(closePPS);
  }
 }
};

// PPS.java

package com.domain.notlaunchingservice;
import android.app.Service;
import android.view.Gravity;
import android.widget.Toast;
public abstract class PPS extends Service
{
 @Override
 public void onCreate()
 {
  Toast toasty = Toast.makeText(PPS.this, "service created!", 500);
  toasty.setGravity(Gravity.CENTER, 0, 200);
  toasty.show();
 };
 public void onDestroy()
 {
  Toast toasted = Toast.makeText(PPS.this, "service destroyed!", 500);
  toasted.setGravity(Gravity.CENTER, 0, -200);
  toasted.show();
 }; 
};

Я также пытался вызвать службу, используя:

startService(new Intent(MainMenu.this, PPS.class));

, это возвращает ошибку на эмуляторе, когда приложение неожиданно завершает работу, и я нажимаю принудительно закрыть,основная деятельность не закрывается, поэтому я предполагаю, что это служба, которую я принудительно закрываю.ниже приведен вывод DDMS:

java.lang.RuntimeException: Unable to instantiate service com.domain.notlaunchingservice.PPS

Мне все равно, как запустить службу, если она может загрузить базу SQL и продолжить запись звука в файл после того, как основное действие потеряет фокус илизакрыт.

это будет бесплатное приложение на рынке, когда оно будет завершено, поэтому многие оценят вашу помощь, когда проект будет готов к прайм-тайм.

спасибо за чтение

1 Ответ

0 голосов
/ 09 февраля 2012

Одна проблема заключается в том, что намерение, которое вы используете для запуска и остановки службы, указывает только на дополнительные.

Intent startPPS = new Intent();

должно быть

Intent startPPS = new Intent(this, PPS.class);

Но есть и другие проблемы (я не думаю, что ваш пример компилируется), я бы порекомендовал вам взглянуть на пример на http://developer.android.com/guide/topics/fundamentals/services.html#ExtendingIntentService

Редактировать: (пример кода ниже)

public class StartedService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        // I guess that you don't want to bind to the service
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(this, "Service is running", Toast.LENGTH_SHORT).show();
        // Return sticky if you want it to be restarted in a low memory
        // situation
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        Toast.makeText(this, "Service is going down", Toast.LENGTH_SHORT).show();
    }
}


public class ClientActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button startButton = (Button)findViewById(R.id.start_button);
        startButton.setOnClickListener(new OnClickListener() {

            public void onClick(View view) {
                startService(new Intent(ClientActivity.this, StartedService.class));
            }

        });

        Button stopButton = (Button)findViewById(R.id.stop_button);
        stopButton.setOnClickListener(new OnClickListener() {

            public void onClick(View view) {
                stopService(new Intent(ClientActivity.this, StartedService.class));
            }

        });
    }
}
...