首页 > 解决方案 > 对于以下 android API 28 级别,“ApnSetting.Builder”的替代方法是什么?

问题描述

我正在尝试创建一个移动应用程序以将 APN(接入点网络)添加到移动应用程序中。然后我根据下面的android文档使用了 ApnSetting.Builder() 。

package com.example.myapplication;

import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.telephony.data.ApnSetting;
import android.util.Log;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class MainActivity extends AppCompatActivity {
    private static String TAG = "MainActivity";

    @RequiresApi(api = Build.VERSION_CODES.P)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Create an MMS proxy address with a hostname. A network might not be
        // available, so supply a dummy (0.0.0.0) IPv4 address to avoid DNS lookup.
        String host = "mms.example.com";
        byte[] ipAddress = new byte[4];
        InetAddress mmsProxy;
        try {
            mmsProxy = InetAddress.getByAddress(host, ipAddress);
        } catch (UnknownHostException e) {
            e.printStackTrace();
            return;
        }
        ApnSetting apn=null;
        try{
           apn = new ApnSetting.Builder()
                .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_MMS)
                .setApnName("apn.example.com")
                .setEntryName("Example Carrier APN")
                .setMmsc(Uri.parse("http://mms.example.com:8002"))
                .setMmsProxyAddress(mmsProxy)
                .setMmsProxyPort(8799)
                .build();
        }catch (NoClassDefFoundError error){
            error.printStackTrace();
        }
        ComponentName componentName = new ComponentName(getApplicationContext(), MainActivity.class);
        DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getApplicationContext().getSystemService(Context.DEVICE_POLICY_SERVICE);
        devicePolicyManager.addOverrideApn(componentName,apn);
    }
}

ApnSetting.Builder()在 Android 9(API 级别 28)中添加。它不支持 API 28 中的以下内容。

@RequiresApi(api = Build.VERSION_CODES.P)

但我还需要将这个移动应用程序创建到以下 android 版本,如 Lollipop、Marshmallow、Nougat。所以我需要知道是否有替代方法ApnSetting.Builder()。然后我该怎么做。

标签: android

解决方案


ApnSetting.Builder 中没有什么是您不能自己做的。它主要是让您将调用链接到 setter 以使您的代码更易于阅读的方法。像:

    /**
     * Sets the proxy address of the APN.
     *
     * @param proxy the proxy address to set for the APN
     */
    @NonNull
    public Builder setProxyAddress(@Nullable String proxy) {
        this.mProxyAddress = proxy;
        return this;
    }

您可以查看AOSP 中的源代码以了解我的意思。


推荐阅读