Спасибо за ваше решение.Я столкнулся с той же проблемой и работал с вашей помощью.
Я поставил этот ответ, чтобы поделиться своим способом передачи результата обратно в сервис.
Я не создал никакого дополнительного класса пользовательских намерений и решил проблему передачи результатов только с помощью Intent.putExtra()
методов с некоторыми хитростями.
В службе используйте этот код для запуска DialogActivity
, который отображает диалоговое окно с предупреждением в onCreate()
.
Intent intent = new Intent(this.getApplicationContext(), DialogActivity.class);
intent.putExtra(DialogActivity.CLASS_KEY, this.getClass().getCanonicalName());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
А в DialogActivity
завершите его следующим образом:
private void returnOk(boolean ok) {
Intent srcIntent = this.getIntent();
Intent tgtIntent = new Intent();
String className = srcIntent.getExtras().getString(CLASS_KEY);
Log.d("DialogActivity", "Service Class Name: " + className);
ComponentName cn = new ComponentName(this.getApplicationContext(), className);
tgtIntent.setComponent(cn);
tgtIntent.putExtra(RESULT_KEY, ok ? RESULT_OK : RESULT_CANCEL);
this.startService(tgtIntent);
this.finish();
}
Наконец, в службе переопределите метод onStartCommand()
и получите результат из намерения.
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int ret = super.onStartCommand(intent, flags, startId);
Bundle extras = intent.getExtras();
if (extras != null) {
int result = extras.getInt(DialogActivity.RESULT_KEY, -1);
if (result >= 0) {
if (result == DialogActivity.RESULT_OK) {
// Your logic here...
}
} else {
// Your other start logic here...
}
}
return ret;
}
Я не уверен, является ли этот способ хорошим решением, по крайней мере, он работает для меня.Надеюсь, это будет полезно для кого-то, как я.
Полный источник можно найти здесь: