当前位置:编程学习 > 网站相关 >>

NFC学习——NFC Enable 过程分析

         拿到一台支持NFC手机或是平板设备时,在Settings->more可以看到NFC的enble,disnable的选项,还有android Beam这个东西。现在来分析NFC enable的过程  


          wireless_settings.xml 在Settings配置了NFC功能项:

 

[html]
<CheckBoxPreference 
    android:key="toggle_nfc" 
    android:title="@string/nfc_quick_toggle_title" 
    android:summary="@string/nfc_quick_toggle_summary" 
    android:persistent="false" /> 
 
<PreferenceScreen 
    android:fragment="com.android.settings.nfc.AndroidBeam" 
    android:key="android_beam_settings" 
    android:title="@string/android_beam_settings_title" /> 

    <CheckBoxPreference
        android:key="toggle_nfc"
        android:title="@string/nfc_quick_toggle_title"
        android:summary="@string/nfc_quick_toggle_summary"
        android:persistent="false" />

    <PreferenceScreen
        android:fragment="com.android.settings.nfc.AndroidBeam"
        android:key="android_beam_settings"
        android:title="@string/android_beam_settings_title" />         xml配置的对应处理代码在:packages/apps/Settings/src/com/android/settings/WirelessSettings.java


[html]
public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
 
        addPreferencesFromResource(R.xml.wireless_settings);  
        CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC); 
        PreferenceScreen androidBeam = (PreferenceScreen) findPreference(KEY_ANDROID_BEAM_SETTINGS);  
 
        //setp1:获取NfcEnable的实例 
        mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);  
        ...... 
 
        // Remove NFC if its not available             
        //setp2:获取NfcAdapter实例,查看NFC功能是否可能 
        mNfcAdapter = NfcAdapter.getDefaultAdapter(activity); 
        if (mNfcAdapter == null) { 
            getPreferenceScreen().removePreference(nfc); 
            getPreferenceScreen().removePreference(androidBeam); 
            mNfcEnabler = null; 
        }  
 } 

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.wireless_settings);
        CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC);
        PreferenceScreen androidBeam = (PreferenceScreen) findPreference(KEY_ANDROID_BEAM_SETTINGS);

        //setp1:获取NfcEnable的实例
        mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);
        ......

        // Remove NFC if its not available           
        //setp2:获取NfcAdapter实例,查看NFC功能是否可能
        mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);
        if (mNfcAdapter == null) {
            getPreferenceScreen().removePreference(nfc);
            getPreferenceScreen().removePreference(androidBeam);
            mNfcEnabler = null;
        }
 }
setp1:NFcEnable实例 packages/apps/Settings/src/com/android/settings/nfc/NfcEnabler.java 实现Preference.OnPreferenceChangeListener接口监听NFC Enable,disnable事件


[html]
public boolean onPreferenceChange(Preference preference, Object value) { 
        // Turn NFC on/off 
 
        final boolean desiredState = (Boolean) value; 
        mCheckbox.setEnabled(false); 
 
        if (desiredState) {            
           //setp3:用setp2一样的方式获取NfcAdapter实例出来nfc enable 
            mNfcAdapter.enable(); 
        } else { 
            mNfcAdapter.disable(); 
        } 
 
        return false; 
    } 

public boolean onPreferenceChange(Preference preference, Object value) {
        // Turn NFC on/off

        final boolean desiredState = (Boolean) value;
        mCheckbox.setEnabled(false);

        if (desiredState) {          
           //setp3:用setp2一样的方式获取NfcAdapter实例出来nfc enable
            mNfcAdapter.enable();
        } else {
            mNfcAdapter.disable();
        }

        return false;
    }         同时也是在这个NfcEnabler.java中处理了,Nfc enble,diable时,android beam的灰亮显示问题。
Setp2:现在所有的分析点集中到了NfcAdaper这个类中,首先来看下NfcAdapter实例的获取

 

 

[html]
  public static NfcAdapter getDefaultAdapter(Context context) {  
         

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,