ブロードキャストが実行されるたびに、フォアグラウンド アクティビティに対するアラートを表示したいと思います。
ベストアンサー1
(注: API 14 で公式 API が追加されました。この回答を参照してくださいhttps://stackoverflow.com/a/29786451/119733 )
以前の回答 (waqas716) は使用しないでください。
アクティビティへの静的参照のため、メモリ リークの問題が発生します。詳細については、次のリンクを参照してくださいhttp://android-developers.blogspot.fr/2009/01/avoiding-memory-leaks.html
これを回避するには、アクティビティの参照を管理する必要があります。マニフェスト ファイルにアプリケーションの名前を追加します。
<application
android:name=".MyApp"
....
</application>
アプリケーションクラス:
public class MyApp extends Application {
public void onCreate() {
super.onCreate();
}
private Activity mCurrentActivity = null;
public Activity getCurrentActivity(){
return mCurrentActivity;
}
public void setCurrentActivity(Activity mCurrentActivity){
this.mCurrentActivity = mCurrentActivity;
}
}
新しいアクティビティを作成します:
public class MyBaseActivity extends Activity {
protected MyApp mMyApp;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMyApp = (MyApp)this.getApplicationContext();
}
protected void onResume() {
super.onResume();
mMyApp.setCurrentActivity(this);
}
protected void onPause() {
clearReferences();
super.onPause();
}
protected void onDestroy() {
clearReferences();
super.onDestroy();
}
private void clearReferences(){
Activity currActivity = mMyApp.getCurrentActivity();
if (this.equals(currActivity))
mMyApp.setCurrentActivity(null);
}
}
したがって、アクティビティの Activity クラスを拡張する代わりに、MyBaseActivity を拡張するだけです。これで、次のようにしてアプリケーションまたはアクティビティ コンテキストから現在のアクティビティを取得できます。
Activity currentActivity = ((MyApp)context.getApplicationContext()).getCurrentActivity();