[AndroidQ] Q怎麼重新開啓Android Beam

Android  Q 預覽版剛出來的時候,就出現一大波文章說,Google將於Android Q摒棄Android Beam,說其效率低,用戶使用率不高等等。。。

 

那麼到了Android Q , Android beam如果要開呢?

怎麼辦?

 

從AOSP Framework中可以看出,其實還是開了一個API給道OEM來自己定製化這個功能。

frameworks/base/core/java/android/content/pm/PackageManager.java

    /**
     * Feature for {@link #getSystemAvailableFeatures} and
     * {@link #hasSystemFeature}: The Beam API is enabled on the device.
     */
    @SdkConstant(SdkConstantType.FEATURE)
    public static final String FEATURE_NFC_BEAM = "android.sofware.nfc.beam";

可以看出,到了Android Q 版本,beam需要像HCE那樣通過feature的方式來開啓功能。

這就意味着,需要在手機中生成相應的feature xml文件來開啓。

那麼Nfc模塊裏邊是怎麼處理的呢?

packages/apps/Nfc/src/com/android/nfc/NfcService.java

        PackageManager pm = mContext.getPackageManager();
        mIsBeamCapable = pm.hasSystemFeature(PackageManager.FEATURE_NFC_BEAM);//判斷
        mIsNdefPushEnabled =
                mPrefs.getBoolean(PREF_NDEF_PUSH_ON, NDEF_PUSH_ON_DEFAULT) &&
                        mIsBeamCapable;
        if (mIsBeamCapable) {
            mP2pLinkManager = new P2pLinkManager(
                    mContext, mHandoverDataParser, mDeviceHost.getDefaultLlcpMiu(),
                    mDeviceHost.getDefaultLlcpRwSize());
        }
        enforceBeamShareActivityPolicy(mContext, new UserHandle(mUserId));

Settings中Android Beam菜單怎麼處理的?

/packages/apps/MtkSettings/src/com/android/settings/nfc/AndroidBeamPreferenceController.java

    @Override
    @AvailabilityStatus
    public int getAvailabilityStatus() {
        PackageManager pm = mContext.getPackageManager();
        if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC_BEAM)) {
            return UNSUPPORTED_ON_DEVICE;
        }
        return mNfcAdapter != null
                ? AVAILABLE
                : UNSUPPORTED_ON_DEVICE;
    }

都是隻需要通過這個feature來判斷,接下來就是怎麼來加這feature。

1.首先,建立個android.sofware.nfc.beam.xml文件,裏邊內容如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2013 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<!-- This feature indicates that the device supports Android Beam -->
<permissions>
    <feature name="android.sofware.nfc.beam" />
</permissions>

注意是sofware,而不是software單詞,這個要跟PackageManager提供的API一致,其餘的都是使用software單詞,例如:midi.

不知這是故意爲之,還是個美麗小失誤。

見手機目錄內容如下:

android.sofware.nfc.beam.xml

注意,

這個文件需要自己創建,AOSP默認已經不提供此文件了。

原來像HCE這些,都在framework目錄中有提供。

 

看效果:

添加android.sofware.nfc.beam.xml後。

Settings Android beam菜單出現

 

 

到這裏,就成功地將Android Beam恢復了。

說Android Q移除Andriod beam, 無非就是在原來默認添加的基礎上,加了一層判斷障礙,一旦不滿足,就默認移除P2p模式。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章