因为业务需要,做个库给应用使用,需要动态的给contentprovider配置uri,于是便用到了meta和${applicationId},很方便的解决了问题,并且极大的方便了其他应用的使用。
1.在AndroidManifest里面配置meta
<meta-data android:name="BFC_UPLOAD_HOST_APP_ID" android:value="${applicationId}" />
${applicationId}的作用就是用applicationId替代meta-data 的value的值2.contentprovider配置<provider android:name="com.eebbk.bfc.uploadsdk.upload.provider.UploadProvider" android:authorities="${applicationId}.bbkupload" android:exported="true"></provider>
3.获取meta-data的值public static String getHostAppId(Context appContext) throws IllegalArgumentException { ApplicationInfo applicationInfo = null; try { applicationInfo = appContext.getPackageManager().getApplicationInfo(appContext.getPackageName(), PackageManager.GET_META_DATA); if(applicationInfo == null){ throw new IllegalArgumentException(" get application info = null, has no meta data! "); } return applicationInfo.metaData.getString(Constants.BFC_UPLOADLOAD_HOST_APP_ID); } catch (PackageManager.NameNotFoundException e) { throw new IllegalArgumentException(" get application info error! ", e); } }5.为packagename赋值,并获取uri动态的string:String packagename = applicationInfo ;6.获取到authorties 的值后。我们便可以在contentprovider创建时配置到URI里面,String uri= TextUtils.concat(packagename , ".bbkupload").toString()应用使用的时候也不用配置contentprovider了示例如下:URI_MACHER.addURI(uri, "my_uploads", MY_UPLOADS);