マニフェストで SMS を処理するために、BroadcastReceiver を静的に登録しています。アプリケーションの実行中にそのレシーバークラスの onReceive() メソッドが呼び出されたかどうかを確認する適切な方法はありますか?
これは、アプリケーションが実行されていないときに SMS を受信した場合にアクティビティを開始できるようにするために必要です。それ以外の場合は、情報を処理して通知を表示するだけです。
マニフェストで SMS を処理するために、BroadcastReceiver を静的に登録しています。アプリケーションの実行中にそのレシーバークラスの onReceive() メソッドが呼び出されたかどうかを確認する適切な方法はありますか?
これは、アプリケーションが実行されていないときに SMS を受信した場合にアクティビティを開始できるようにするために必要です。それ以外の場合は、情報を処理して通知を表示するだけです。
Activity.onPause()
、Activity.onResume()
メソッド、および静的ブール値を使用して、アプリケーションの可視性を自分で追跡します。「可視性」ステータスを他のクラスに保存します。Application
適切な選択は、または の独自の実装ですService
(サービスからアクティビティの可視性を確認したい場合は、このソリューションの [いくつかのバリエーション][4] もあります)。
例
この例では、1 つのアクティビティのスケルトン コードを提供しますが、複数のアクティビティを追跡する必要がある場合は、さらにブール値を追加できます。
カスタム クラスを実装します (静的メソッドApplication
に注意してください)。isActivityVisible()
public class MyApplication extends Application {
public static boolean isActivityVisible() {
return activityVisible;
}
public static void activityResumed() {
activityVisible = true;
}
public static void activityPaused() {
activityVisible = false;
}
private static boolean activityVisible;
}
アプリケーション クラスを に登録しますAndroidManifest.xml
。
<application
android:name="your.app.package.MyApplication"
android:icon="@drawable/icon"
android:label="@string/app_name" >
プロジェクト内のすべてにonPause
andを追加します (必要に応じてアクティビティの共通の祖先を作成することもできますが、アクティビティがすでに/などから拡張されている場合は、以下を手動で記述する必要があります)。onResume
Activity
MapActivity
ListActivity
@Override
protected void onResume() {
super.onResume();
MyApplication.activityResumed();
}
@Override
protected void onPause() {
super.onPause();
MyApplication.activityPaused();
}