Я пытаюсь назвать stopService своего класса обслуживания () методом от моего действия. Но я не знаю, как получить доступ к stopservice методу от моего класса действия. У меня есть ниже кода, но не работа...........
Это - класс HomeScreen:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
enablecheck = (CheckBox)findViewById(R.id.enablecheck);
enablecheck.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(enablecheck.isChecked()){
startService(new Intent(HomeScreen.this, AutoService.class));
}else
{
stopService(new Intent(HomeScreen.this, AutoService.class));
}
}
});
}
This is Service Class:
public class AutoService extends Service {
private static final String TAG = "AutoService";
private Timer timer;
private TimerTask task;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "Auto Service Created", Toast.LENGTH_LONG).show();
Log.d(TAG, "onCreate");
int delay = 5000; // delay for 5 sec.
int period = 5000; // repeat every sec.
timer = new Timer();
timer.scheduleAtFixedRate(task = new TimerTask(){
public void run()
{
System.out.println("done");
}
}, delay, period);
}
@Override
public boolean stopService(Intent name) {
// TODO Auto-generated method stub
timer.cancel();
task.cancel();
return super.stopService(name);
}
}
Любое очень заметное предложение. Спасибо и наилучшие пожелания Mintu
Похоже, он должен остановить службу, когда вы снимите флажок. Есть ли исключения в журнале? stopService возвращает логическое значение, указывающее, удалось ли остановить службу.
Если вы запускаете службу с помощью намерений, вы можете захотеть расширить IntentService вместо службы. Этот класс остановит службу самостоятельно, когда у него больше не будет работы.
AutoService
class AutoService extends IntentService {
private static final String TAG = "AutoService";
private Timer timer;
private TimerTask task;
public onCreate() {
timer = new Timer();
timer = new TimerTask() {
public void run()
{
System.out.println("done");
}
}
}
protected void onHandleIntent(Intent i) {
Log.d(TAG, "onHandleIntent");
int delay = 5000; // delay for 5 sec.
int period = 5000; // repeat every sec.
timer.scheduleAtFixedRate(timerTask, delay, period);
}
public boolean stopService(Intent name) {
// TODO Auto-generated method stub
timer.cancel();
task.cancel();
return super.stopService(name);
}
}
На самом деле я использовал почти тот же код, что и вы выше. Моя регистрация службы в манифесте выглядит следующим образом
<service android:name=".service.MyService" android:enabled="true">
<intent-filter android:label="@string/menuItemStartService" >
<action android:name="it.unibz.bluedroid.bluetooth.service.MY_SERVICE"/>
</intent-filter>
</service>
В классе обслуживания я создал соответствующую постоянную строку, идентифицирующую имя службы, например:
public class MyService extends ForeGroundService {
public static final String MY_SERVICE = "it.unibz.bluedroid.bluetooth.service.MY_SERVICE";
...
}
, и из соответствующего Activity я вызываю ее с помощью
startService(new Intent(MyService.MY_SERVICE));
и останавливаю с помощью
stopService(new Intent(MyService.MY_SERVICE));
Работает отлично. Попробуйте проверить свою конфигурацию и, если вы не обнаружите ничего странного, попробуйте отладить, правильно ли вызывается ваш stopService.