サービスを利用した特別な放送受信者の登録
2022-02-17 06:31:35
1. Androidシステムの操作で特に頻度の高いブロードキャストイベントである画面ロック解除とロック画面
2.マニフェストファイルでの登録は無効、コードで登録する必要がある
3. MainActivityに登録すると、MainActivityが破壊されたときにブロードキャストを受信できない。
4. 放送受信機のサービス登録を検討する
MainActivityです。
package com.itheima74.rigisterservice;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Open the service
Intent intent = new Intent(this,ScreenService.class);
startService(intent);
}
}
ScreenReceiverです。
package com.itheima74.rigisterservice;
import android.content;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class ScreenReceiver extends BroadcastReceiver {
// Execute this method when the screen is locked or unlocked
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if ("android.intent.action.SCREEN_OFF".equals(action)) {
Log.i("Phone is locked");
} else if ("android.intent.action.SCREEN_ON".equals(action)) {
Log.i("Phone is unlocked");
}
}
}
ScreenServiceです。
package com.itheima74.rigisterservice;
import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
public class ScreenService extends Service {
private ScreenReceiver receiver;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
// Why not register in the Mainactivity?
// Because the special broadcast receiver is not valid after the Mainactivity exits, it needs to run in the background for a long time
receiver = new ScreenReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.SCREEN_OFF");
filter.addAction("android.intent.action.SCREEN_ON");
registerReceiver(receiver, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
}
関連
-
Androidで「デフォルトのアクティビティが見つからない」問題を解決する
-
障害発生 [INSTALL_FAILED_OLDER_SDK] 解決方法
-
アンドロイドにおけるemsの本当の意味
-
Android ViewPager のエラーです。NULLオブジェクトの参照で仮想メソッドxxxを呼び出そうとした
-
Jniエラー:構造体でも組合でもないものにメンバー 'FindClass' を要求する、 解決方法
-
60フレーム飛ばした!?アプリケーションがメインスレッドで過剰な作業を行っている可能性があります。
-
スピナー実装のダウンメニューとイベントリスニング(グラフィックモード)
-
アンドロイドについて:DescendantFocusability いくつかの使用感
-
AndroidManifestのuses-permissionの設定
-
SQLiteReadOnlyDatabaseException: 読み取り専用のデータベースを書き込もうとした (コード 1032)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Android Studio + Gradle またはコマンドラインを使用した Android apk の署名とパッケージング
-
第20章 OnCheckedChangeListenerイベント (ゼロから学ぶAndroid)
-
com.android.ide.common.process.ProcessException が発生する可能性のある原因。aaptの実行に失敗したエラー(解決済み)
-
Android RecyclerViewで「アダプターが接続されていません」と表示され、問題解析がスキップされる。
-
Rは変数に解決できない
-
Androidバージョン一覧
-
Android 高機能版 (xxv) setTextColor() パラメータ設定方法
-
Android画像角丸
-
Android Studioのヒント - これを読めば、すべてのヒントが役に立つ
-
android.view.inflateexception バイナリ xml ファイル行例外の解決方法