NFC リーダーとの間でデータを送受信する HCE サービスを使用していますが、サービスの起動設定を指定できるかどうか疑問に思っていました。アプリが実行されている場合にのみ、サービスを呼び出すことができるように指定したいと考えています。アプリが閉じている場合、サービスは呼び出されません。これは可能ですか、それともサービスを常に呼び出すことができるように意図されていましたか?
1 に答える
現在、HCE サービスがロック画面からのカード エミュレーションと見なされるかどうか、またはユーザーがロック画面を通過した場合にのみ指定することができます (こちらを参照してください。アプリのアクティビティがフォアグラウンドにあります。
サービスを HCE イベント (他の NFC イベントの場合のようにアクティビティではなく) のターゲットとして使用する背後にある全体的な考え方は、HCE の機能にいつでもアクセスできる必要があり、アクティビティがフォアグラウンドにある必要はないということです。 .
HCE サービスの可用性を制限するためにできることは、サービスが特定のアクションの実行を許可されているかどうかを示すフラグをアプリの共有設定に設定することです (共有設定が推奨される理由については、この質問を参照してください)。その後、HCE サービス内でそのフラグを照会し、HCE で利用できる機能を決定できます。
または、サービス コンポーネント全体を無効にして (この質問/回答を参照)、アクティビティがフォアグラウンドにある間だけサービスを有効にすることもできます。
public void onResume() {
super.onResume();
PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(this, "com.example.app.HceService"),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
public void onPause() {
super.onPause();
PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(this, "com.example.app.HceService"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
HCE サービスは引き続き特定のコマンド(アプリケーションの選択など) に応答し、セキュリティ/プライバシー関連のコマンドのみをブロックすることをお勧めします。