2014-05-07 26 views
4

我正在搜索Android源代码,因为我想了解应用程序的AndroidManifest.xml何时被解析。如何获得在操作系统中注册的Android应用程序

I.e.如果一个应用程序的registeres NFC服务

<service 
     android:name=".demo.service.ApduService" 
     android:exported="true" 
     android:permission="android.permission.BIND_NFC_SERVICE"> 

     <intent-filter> 
      <action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE" /> 
     </intent-filter> 

     <meta-data 
      android:name="android.nfc.cardemulation.host_apdu_service" 
      android:resource="@xml/apduservice" /> 
    </service> 

与以下apduservice.xml

<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android" 
android:description="@string/servicedesc" 
android:requireDeviceUnlock="false" > 

<aid-group 
    android:category="other" 
    android:description="@string/aiddescription" > 
    <aid-filter android:name="23498234098234098" /> 
</aid-group> 

何时何地不Android操作系统读出的辅助过滤器和registeres的ID?

(我知道它会被存储,以及如何,但我找不到在哪里实际的ID被提取,并转发到NFC堆栈的事件)

回答

6

当是主机和关闭的名单-host CE服务已更新?

无论何时添加,更改,更新,删除应用程序包,都会收集和更新关于主机和离线主机APDU服务(HCE和基于SE的CE)的信息。这由广播接收机在com.android.nfc.cardemulation.RegisteredServicesCache 。广播接收器为以下事件是敏感:

  • ACTION_PACKAGE_ADDED
  • ACTION_PACKAGE_CHANGED
  • ACTION_PACKAGE_REMOVED
  • ACTION_PACKAGE_REPLACED
  • ACTION_PACKAGE_FIRST_LAUNCH
  • ACTION_PACKAGE_RESTARTED
  • ACTION_EXTERNAL_APPLICATIONS_AVAILABLE
  • ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE

此外,每次启用NFC服务时都会更新AID。

如何以及在哪里生成服务列表?

在更新过程中,该系统是为queried服务为目的的行动android.nfc.cardemulation.action.HOST_APDU_SERVICEandroid.nfc.cardemulation.action.OFF_HOST_APDU_SERVICE过滤器的列表。对于每项服务,检查应用程序是否拥有使用NFC的权限,并且服务是否需要BIND_NFC_SERVICE权限。如果是这种情况,则将服务考虑为卡模拟。

提取AID列表的方式和位置?

然后主机和脱离主机APDU服务被存储在一个andoid.nfc.cardemulation.ApduServiceInfo对象的列表中。该类别的constructorprocesses<service>标记中指定的元数据和AID列表。

卡模拟系统如何以及在哪里更新新列表?

列表编译完成后,传递给com.android.nfc.cardemulation.RegisteredAidCache。在那里,服务和AID列表被用于编译主机上和主机外AID路由的路由表。

+0

非常感谢你的回答! –

相关问题