diff options
Diffstat (limited to 'services/java')
-rw-r--r-- | services/java/com/android/server/SystemServer.java | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 48deb68..2e4884e 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -1204,6 +1204,15 @@ public final class SystemServer { Slog.i(TAG, "WebViewFactory preparation"); WebViewFactory.prepareWebViewInSystemServer(); + // Start Nfc before SystemUi to ensure NfcTile and other apps gets a + // valid NfcAdapter from NfcManager + try { + startNfcService(context); + } catch (Throwable e) { + // Don't crash. Nfc is an optional service. Just annotate that isn't ready + Slog.e(TAG, "Nfc service didn't start. Nfc will not be available.", e); + } + try { startSystemUi(context); } catch (Throwable e) { @@ -1333,4 +1342,23 @@ public final class SystemServer { //Slog.d(TAG, "Starting service: " + intent); context.startServiceAsUser(intent, UserHandle.OWNER); } + + static final void startNfcService(Context context) { + IPackageManager pm = ActivityThread.getPackageManager(); + if (pm == null) { + Slog.w(TAG, "Cannot get package manager, assuming no NFC feature"); + return; + } + try { + if (pm.hasSystemFeature(PackageManager.FEATURE_NFC)) { + Intent intent = new Intent(); + intent.setComponent(new ComponentName("com.android.nfc", + "com.android.nfc.NfcBootstrapService")); + context.startServiceAsUser(intent, UserHandle.OWNER); + } + } catch (RemoteException e) { + Slog.w(TAG, "Package manager query failed, assuming no NFC feature", e); + return; + } + } } |