首先我希望我會尊重這個論壇的網絡禮儀,因爲這是我第一次使用它。從運行啓動的廣播接收器開始一個alertDialog活動
這是我的問題:我有具有以下結構的Android應用:
- 主要活動(顯示一些用戶指示和取決於SMS內容的一些警報對話框(參見2))
- SMS廣播接收器在啓動時運行(它工作正常,在啓動時運行,閱讀SMS並以正確的方式解析它們)。
我希望能夠在接收器獲得正確的SMS時激活Activity並顯示AlertDialog。 如果我第一次顯示Activity然後離開它(如果活動進入暫停狀態),Everythings正常工作,但如果我從不打開Activity,我只能顯示活動本身,但不能激活AlertDialog。
這裏是兩個碼小塊:
接收機(接收特定SMS時執行的代碼):
//Show/start activity
Intent sec=new Intent(context, SecureMessagesActivity.class);
sec.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(sec);
// Activate AlertDialog
Intent i = new Intent(context.getString(R.string.intentReceivedSuccessSms)).putExtra("some_msg", "I will be sent!");
context.sendBroadcast(i);
Log.v(TAG, "Sent Intent intentReceivedSuccessSms");
活性(在Android清單定義爲singleTop):
public void onCreate(Bundle savedInstanceState)
{
Log.v(TAG, "Performing onCreate");
super.onCreate(savedInstanceState);
setTheme(android.R.style.Theme_Light);
setContentView(R.layout.main);
//--------------------------------------------------------------
// Manage subscription to intent
//--------------------------------------------------------------
IntentFilter intentFilter = new IntentFilter(
getString(R.string.intentReceivedSuccessSms));
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, Intent intent) {
AlertDialog.Builder ad = new AlertDialog.Builder(context);
ad.setTitle(getString(R.string.youFoundIt));
ad.setMessage(getString(R.string.stopTheMusic));
ad.setIcon(R.drawable.tick);
ad.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.v(TAG, "Received button pressure to stop ringtone");
};
}
);
ad.show();
}
};
//registering our receiver
this.registerReceiver(mReceiver, intentFilter);
//--------------------------------------------------------------
// End of manage subscription to intent
//--------------------------------------------------------------
}
我認爲我的問題是因爲應用程序尚未激活時,只有廣播接收器處於活動狀態,所以我從不運行活動的OnCreate方法。通過這種方式,我認爲首先開始活動(參見評論「顯示/開始活動」)並立即發送OnCreate方法接受的廣播消息並且因此仍然沒有註冊,因爲OnCreate在接收者發送內容時仍然沒有開始)。 但我不明白如何解決它,我認爲這是一個架構問題。 請注意,如果我啓動手機,並送2級的消息,出現這種情況:
- 手機上
- 一是短信
- 活動顯示了,沒有AlertDialog
- 最小化活動(或將其全屏幕,無所謂)
- 活動顯示了,與AlertDialog
任何幫助將不勝感激
祝你新年快樂。
非常感謝David,事實上,今晚我有同樣的想法,你提出,我終於設法讓代碼工作正常。 我希望我做了正確的事情,提出您的消息作爲解決方案,如果我錯過了什麼,讓我知道,這是我第一次使用stackoverflow – Giox79
很高興你能解決問題,並歡迎來到StackOverflow!你做得很好。 –