謝謝您的解決方案。 我面臨同樣的問題,並在您的幫助下解決問題。
我把這個答案只是爲了分享我的方式將結果傳遞迴服務。
我沒有創建任何額外的自定義意圖類,只用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;
}
我不知道這種方式是否是一個很好的解決方案,至少它爲我工作。希望這會對像我這樣的其他人有所幫助。
的完整源可以在這裏找到:
[從Android的服務警報對話框(可能的重複http://stackoverflow.com/questions/3599563/alert-dialog-from-android-service) – araks 2015-11-06 17:36:26