当前位置:  编程技术>移动开发
本页文章导读:
    ▪解决iTunes connect上传后“Missing Localized Screenshots”异常        解决iTunes connect上传后“Missing Localized Screenshots”错误直接上传一个应用截图放在iphone5的界面栏里即可消除这个警告.......
    ▪ NFC学习——NfcService 起步过程分析        NFC学习——NfcService 启动过程分析在机器开机过程中,可以抓取到以下的正常logcat信息: //setp1 I/NfcService( 3809): Starting NFC service D/NFCJNI ( 3809): NFC Service : loading JNI I/RegisteredComponentCache( 3809): Comp.........
    ▪ 导航中地图viewer接口的一些概念和实现       导航中mapviewer接口的一些概念和实现mapviewer与在导航引擎中的位置? mapviewer提供哪些功能? mapviewer的实现? mapviewer的特性?难点? mapviewer与其他引擎接口的关系: 相关要素:当前位置p.........

[1]解决iTunes connect上传后“Missing Localized Screenshots”异常
    来源: 互联网  发布时间: 2014-02-18
解决iTunes connect上传后“Missing Localized Screenshots”错误

直接上传一个应用截图放在iphone5的界面栏里即可消除这个警告.
【这是小弟的处理方法,哪位大神有正解,能否回复一下,谢谢。】



参考:

http://www.cocoachina.com/bbs/read.php?tid=117258


    
[2] NFC学习——NfcService 起步过程分析
    来源: 互联网  发布时间: 2014-02-18
NFC学习——NfcService 启动过程分析

在机器开机过程中,可以抓取到以下的正常logcat信息:

//setp1
I/NfcService( 3809): Starting NFC service
D/NFCJNI  ( 3809): NFC Service : loading JNI
I/RegisteredComponentCache( 3809): ComponentInfo: ResolveInfo{41344108 
com.android.apps.tag.TagViewer p=0 o=0 m=0x108000}, techs: android.nfc.tech.Ndef, 
W/NfceeAccess( 3809): could not find /etc/nfcee_access.xml, no NFCEE access allowed
I/NfceeAccess( 3809): read 0 signature(s) for NFCEE access
D/NfcService( 3809): checking on firmware download
下面是硬件不支持NFC的异常logcat信息:
I/NfcService( 3485): Starting NFC service
D/NFCJNI  ( 3485): NFC Service : loading JNI
W/NfceeAccess( 3485): could not find /etc/nfcee_access.xml, no NFCEE access allowed
I/NfceeAccess( 3485): read 0 signature(s) for NFCEE access
D/NfcService( 3485): checking on firmware download
D/NfcService( 3485): NFC is on. Doing normal stuff
I/NfcService( 3485): Enabling NFC
D/NFCJNI  ( 3485): Start Initialization
E/NFCJNI  ( 3485): hw_get_module() failed.
D/NFCJNI  ( 3485): Terminating client thread...
W/NfcService( 3485): Error enabling NFC
来看正常logcat信息setp1,NfcService 是application,它的onCreate()方法:

@Override
    public void onCreate() {
        super.onCreate();

        mNfcTagService = new TagService();
        mNfcAdapter = new NfcAdapterService();
        mExtrasService = new NfcAdapterExtrasService();

        Log.i(TAG, "Starting NFC service");
        
        //setp2:NFC Service : loading JNI
        mDeviceHost = new NativeNfcManager(this, this);

        HandoverManager handoverManager = new HandoverManager(mContext);
 		
 	//NfcDispatcher主要负责tag消息处理,并派发Intent消息,启动Activity。
 	mNfcDispatcher = new NfcDispatcher(this, handoverManager); 
 	    
 	mP2pLinkManager = new P2pLinkManager(mContext, handoverManager); 
 	mSecureElement = new NativeNfcSecureElement(mContext);                 
 	    
        //setp3:could not find /etc/nfcee_access.xml, no NFCEE access allowed 
        mNfceeAccessControl = new NfceeAccessControl(this); 
        
   //把mNfcAdapter 作为Service 添加到系统服务中,ServiceManager.getService("nfc")可以获取到binder                      
        ServiceManager.addService(SERVICE_NAME, mNfcAdapter);
 	    
 	updatePackageCache();         
 	    
 	//setp4:checking on firmware download        
 	new EnableDisableTask().execute(TASK_BOOT); // do blocking boot tasks 
    }
Setp2:NFC Service loading JNI,这一部分是在NativeNfcManager.java中处理的  

//加载jni编译生成的nfc_jni.so.通过NativeNfcManager调用jni部分
static {
        System.loadLibrary("nfc_jni");
    }

//NativeNfcManager 构造方法
public NativeNfcManager(Context context, DeviceHostListener listener) {
        mListener = listener;

        //setp2-1:com_android_nfc_NativeNfcManager.cpp的native方法
        //com_android_nfc_NfcManager_init_native_struc(JNIEnv *e, jobject o)
        initializeNativeStructure();
        mContext = context;
    }
Setp2-1:com_android_nfc_NfcManager_init_native_struc(),初始化nfc_jni_native_data结构体

static jboolean com_android_nfc_NfcManager_init_native_struc(JNIEnv *e, jobject o)
{ 
  /* Initialize native structure */   
  // 涉及到nfc_jni_native_date结构体的定义在com_android_nfc.h
   nat = (nfc_jni_native_data*)malloc(sizeof(struct nfc_jni_native_data));
   if(nat == NULL)
   {
      ALOGD("malloc of nfc_jni_native_data failed");
      return FALSE;   
   }
   memset(nat, 0, sizeof(*nat));

   /* Initialize native cached references */ 
   //通过jni 调用java 层的方法
   cached_NfcManager_notifyNdefMessageListeners = e->GetMethodID(cls,
      "notifyNdefMessageListeners","(Lcom/android/nfc/nxp/NativeNfcTag;)V");

   cached_NfcManager_notifyTransactionListeners = e->GetMethodID(cls,
      "notifyTransactionListeners", "([B)V");
         
   cached_NfcManager_notifyLlcpLinkActivation = e->GetMethodID(cls,
      "notifyLlcpLinkActivation","(Lcom/android/nfc/nxp/NativeP2pDevice;)V");
         
   cached_NfcManager_notifyLlcpLinkDeactivated = e->GetMethodID(cls,
      "notifyLlcpLinkDeactivated","(Lcom/android/nfc/nxp/NativeP2pDevice;)V"); 
      
   cached_NfcManager_notifyTargetDeselected = e->GetMethodID(cls,
      "notifyTargetDeselected","()V");   
   
   //nfc_jni_cache_object 原型在com_android_nfc.cpp中,有什么作用,做什么动作暂时没有搞清楚?
   if(nfc_jni_cache_object(e,"com/android/nfc/nxp/NativeNfcTag",&(nat->cached_NfcTag)) == -1)
   {
      ALOGD("Native Structure initialization failed");
      return FALSE;
   }
         
   if(nfc_jni_cache_object(e,"com/android/nfc/nxp/NativeP2pDevice",&(nat->cached_P2pDevice)) == -1)
   {
      ALOGD("Native Structure initialization failed");
      return FALSE;   
   }
   TRACE("****** Init Native Structure OK ******");
   return TRUE;
}
Setp3:解析/etc/nfcee_access.xml,NfceeAccessControl.java主要用来解析nfcee_access,xml并做一些证书和安全方面的check。nfcee_access.xml的文件内容:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <!-- The built in list of signatures and package names that are allowed
    access to the NFCEE (Secure Element).

    Format:
    <signer android:signature="SIGNATURE">
        <package android:name="PACKAGE_NAME" />
        ...
    </signer>       
     Example:
    <signer android:signature="308201c53082012ea00302010202044ebb27cc300d06092a864886f70d01010505003026310f300d060355040a1306476f6f676c65311330110603550403130a4e69636b2050656c6c793020170d3131313131303031323432385a180f32313131313031373031323432385a3026310f300d060355040a1306476f6f676c65311330110603550403130a4e69636b2050656c6c7930819f300d06092a864886f70d010101050003818d00308189028181008d43e546b3f5572707a095ced120d8f06781fa162bcf0ffa0ed0ecb48eb90ed009f65a5a1afd69fb4d38cf24e931b69b061741b8c7ca9f785ba59509e883f5a308f5e2da3c496bb362a2229da8f95f08a92f7f94c829c56e78a34e5147d138d0be0671cb5b7caceaffae6199ba544496a7645e7df3c9f02c5ac156eb0501584f0203010001300d06092a864886f70d0101050500038181003511bcb73651a7927db71ad76e4f6dc5ba121c941ae0fd4dfe519aae8775520b204a5e3cdad2c61ad41aff2c510dbe3376a7578d8aba00f35633e1ae72c91ec83d80eac6f5f081fb8361c6c30c47b0a17932d859d7e991e02cba410a82b35234b2b1bc859e50fe308bf9b64b71a8046777300c07ead159287c187b8865e23f23" />
    <signer android:signature="3082044c30820334a003020102020900de7695041d7650c0300d06092a864886f70d01010505003077310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f6964311330110603550403130a476f6f676c65204e4643301e170d3131303332343031303332345a170d3338303830393031303332345a3077310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f6964311330110603550403130a476f6f676c65204e464330820120300d06092a864886f70d01010105000382010d00308201080282010100e6ff3defe92aa10d71eb0fa6408bc036b7e243eeed68a6a4763dc7a52a31757cdac61fe510bb73c716e4000104265b347fcecef4c42bf1e1379dd0a876f028227fbbc1f9bdd5d713b2f6a935a379d2cba9c96f92d2d0787c11f1eb19548008a6a072b34b91836cfa0ae1276780e9007530166986a11c9cef46cef7c704806dde9431fb60284d120ab0e7de1d633f07687d468c51139afffdc6bc9a207ca904b8be1da0aa7b4e97756f43606488be5cae3c68e8bb7942cdf51607c930a2fcda655b75d0759cba89ad06e739bd0ba29b1f404296c2c0a85a847f5ab0d067c6c3ec9c49212042ac63a7e53b546c65b46080b4e3e680e23e1f77cfe7f6de744b1a65020103a381dc3081d9301d0603551d0e04160414a2e89064b05d08865c34db930a9d840050117aec3081a90603551d230481a130819e8014a2e89064b05d08865c34db930a9d840050117aeca17ba4793077310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f6964311330110603550403130a476f6f676c65204e4643820900de7695041d7650c0300c0603551d13040530030101ff300d06092a864886f70d010105050003820101003771870ce87c3c52ea84899230c6e962d94b4d5f1293c25d88261541fd90b5555d1285cef3b8312c3f5df691a8aae04cb981b305e427fd1d2d9e1987e1d29078f13c8452990f1821980263d8d4bd36519348d8d8ba26d8b99fbf09f5fd3ebb0ea3c2f0c9376f1e1fca76f3a6a405429d081b752a7a90b756e9ab44da41abc8e1e8f88ac2758da743fb73e650719a57840ccb6b7add21b99fc681e456e1872c223d5c074adf55f6abda268c2d8b64ea0a8845eecd968f92b493127e75c753c3ff30cbc678b51c9f52961472f17da20a0dc6274aa2463434c1a9b614df697d8ff5ca8101e7a25c7db3fb055d65569c04b01d389cabba57b3a1703ec2e74a88d334">
        <package android:name="com.foo.my.awesome.wallet" />
        <package android:name="com.foo.my.awesome.wallet.tests" />
    </signer>      -->
</resources>
 我的理解nfcee_access.xml是用来控制一些Apps对NFC的访问的,可能用于手机钱包,手机支付等安全性要求高的应用中。不知道对不对,欢迎探讨。

             Setp4:用以个AsyncTask来后台处理,检测NFC 是否打开,NFC是否具备打开的环境等问题。如果没有打开,调用Jni初始化NFC。
             以上是根据logcat信息来一步一步分析的。还有背后没有发现的信息,NfcAdapter的初始化.NfcService 作为一个application启动时,会创建一个ContextIml的对象。在               ContextIml中有如下code:

tatic{

registerService(NFC_SERVICE, new ServiceFetcher() {

                public Object createService(ContextImpl ctx) {

                    return new NfcManager(ctx);

                }});

}
在NfcManager的构造函数中,调用了NfcAdapter.getNfcAdapter(context),创建NFC Adapter。
public static synchronized NfcAdapter getNfcAdapter(Context context) {
……

            sService = getServiceInterface();//获取NFC服务接口

        ……

            try {

                sTagService = sService.getNfcTagInterface();//获取NFC tag服务接口

            } catch (RemoteException e) {

            }

        ……

        NfcAdapter adapter = sNfcAdapters.get(context);

        if (adapter == null) {

            adapter = new NfcAdapter(context);

            sNfcAdapters.put(context, adapter);

        }
       return adapter;

}

private static INfcAdapter getServiceInterface() {//获取NFC服务接口

        IBinder b = ServiceManager.getService("nfc");

        if (b == null) {
           return null;

        }

        return INfcAdapter.Stub.asInterface(b);

}
我们看看getServiceInterface()方法,调用ServiceManager.addService()将NfcAdapterService的实例添加到系统的服务列表中,这里我们调用ServiceManager.getService(“nfc”)获取到了服务端的NfcAdapterService对象的实例。
在NfcAdapterService类中提供了getNfcTagInterface接口,用于获取远程服务端的TagService对象的实例。
如果一切正常,那么将创建NfcAdapter的实例,在其构造函数中,创建了NfcActivityManager的实例。
有张图可以更说明问题,且很清晰:

以上部分转自:
NFC framework introduce(一)


    
[3] 导航中地图viewer接口的一些概念和实现
    来源: 互联网  发布时间: 2014-02-18
导航中mapviewer接口的一些概念和实现

mapviewer与在导航引擎中的位置?

mapviewer提供哪些功能?

mapviewer的实现?

mapviewer的特性?难点?


mapviewer与其他引擎接口的关系:


相关要素:当前位置positioning,当前规划的道路routeguidance(当道路规划启用时),地图数据(Map)

功能: 为导航控制层或HMI提供数据,如mapdata,route,position等; 并且提供 交互的接口,如设置比例尺,旋转,滚动,显示/隐藏等功能


mapviewer可分为两部分,一部分是map render,是具体数据的渲染,包括当前位置position,route,map,data;另一部分是map,view关键信息的提取或设置,供render部分使用,可认为是map setting(这个不完全准备)层次。


mapviewer是导航引擎中一个重要上层接口。这里的mapviewer是导航引擎中提供给上层地图控制端map control 和界面HMI的接口。

其功能的灵活性和支持力度基本上决定了用户的体验和开发的灵活性。并且,一般的导航引擎的mapviewer 都有3D模式,展示各种地图数据,而经典的2D模式可以看做是3D一种特例。


这里先试着分析下view setting一部分。

在map setting层次的接口有:

获取所有可用的地图的类型、handle信息,窗口画布信息,获取所有view的信息

能打开、关闭指定的地图数据库;

设置本地字符集,单位

Transaction的概念,即同步执行多个方法,在一个transaction中,如果执行成功,则commit,如果部分执行成功,则所有的方法都需要回滚,所有数据恢复到transaction开始之前的状态。transaction一般都是非阻塞,不可中断的方式进行。

------

设置观看某地理坐标的相机位置(图形学中,显示图形的概念)

设置观看某物体时的相机位置

scrolling:3D滚动效果,此时,不断更新相机的位置,与速度(这里是动画的速度,不是行驶速度)、方向相关。关闭scrolling,即速度为0即可。

设置尺度:本质上就是设置相机位置到中心的距离。而与动画的速度相关。

设置显示风格:如map,hmi,guidance规划,hud等,及白天、夜间模式。

显示指定数据库内的所有对象

隐藏指定数据库内的所有对象

设置缓存cache的大小(这个对性能非常重要)


由以上说明可以看出,导航引擎中的mapviewer的交互接口并不直接提供 地图数据mapdata,position位置信息,或道路的详细信息,而仅仅是提取地图数据的一些关键信息,并且能够进行一些交互设置。


关于view的position,map data, route的具体信息都由 控制端上层 负责提取,并渲染。

-----------------------

map render涉及到

地图数据更新

    地图数据的提供是根据NDS中tiles的概念,分层,分片进行的。

当前位置更新

规划道路的实时更新

以及更新这些数据时,当前的输入设置map setting.


(待续)

------------------------

性能测试:如

滚动:从城市的一边到另外一边

缩放:不同的比例尺

跳转:到另外一个城市

旋转



    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
数据库 iis7站长之家
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3