首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓11中的GetNetworkType

安卓11中的GetNetworkType
EN

Stack Overflow用户
提问于 2020-07-02 16:56:34
回答 5查看 12.8K关注 0票数 16

here发布的更改之后,getNetworkType方法从Android和更高版本开始就被弃用了。

当尝试在R编译的应用程序中使用此方法时,会导致抛出以下异常:

代码语言:javascript
复制
java.lang.SecurityException: getDataNetworkTypeForSubscriber: uid 10225 does not have android.permission.READ_PHONE_STATE.
  at android.os.Parcel.createExceptionOrNull(Parcel.java:2285)
  at android.os.Parcel.createException(Parcel.java:2269)
  at android.os.Parcel.readException(Parcel.java:2252)
  at android.os.Parcel.readException(Parcel.java:2194)
  at com.android.internal.telephony.ITelephony$Stub$Proxy.getNetworkTypeForSubscriber(ITelephony.java:7565)
  at android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:2964)
  at android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:2928)
  at com.ironsource.environment.ConnectivityService.getCellularNetworkType(ConnectivityService.java:197)
  at com.ironsource.sdk.service.DeviceData.updateWithConnectionInfo(DeviceData.java:98)
  at com.ironsource.sdk.service.DeviceData.fetchMutableData(DeviceData.java:54)
  at com.ironsource.sdk.service.TokenService.collectDataFromDevice(TokenService.java:120)
  at com.ironsource.sdk.service.TokenService.getRawToken(TokenService.java:177)
  at com.ironsource.sdk.service.TokenService.getToken(TokenService.java:166)
  at com.ironsource.sdk.IronSourceNetwork.getToken(IronSourceNetwork.java:183)

这很好,根据文档,这是意料之中的。如果我将应用程序编译到Android R之前的任何版本,则不会显示异常。

此异常表示我需要请求android.permission.READ_PHONE_STATE权限。

我想知道是否有一种方法可以使用任何其他不需要此权限的API来获取网络类型(因为此权限级别是危险的,我不希望向用户索要它)。

EN

回答 5

Stack Overflow用户

发布于 2021-02-04 13:22:35

获取READ_PHONE_STATE忽略getDataNetworkTypeForSubscriber崩溃的运行时权限

代码语言:javascript
复制
 @Override
    protected void onStart() {
        super.onStart();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {

            int res = checkSelfPermission(android.Manifest.permission.READ_PHONE_STATE);
            if (res != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{android.Manifest.permission.READ_PHONE_STATE}, 123);
            }

        }
    }

    private final static int REQUEST_CODE_ASK_PERMISSIONS = 1002;

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CODE_ASK_PERMISSIONS:
                if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(getApplicationContext(), "READ_PHONE_STATE Denied", Toast.LENGTH_SHORT)
                            .show();
                } else {
                }
                stepAfterSplash();

                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2020-07-12 15:50:20

你仍然可以使用getDataNetworkType();这个方法不一定需要READ_PHONE_STATE,就像他的文档中所说的那样,但是“调用的应用程序具有运营商特权”就足够了。

https://developer.android.com/reference/android/telephony/TelephonyManager#getDataNetworkType()

据我所知,获得这些特权可能很棘手/真的很难,你可以考虑获得运营商特权并使用这种方法,这也是getNetworkType()的建议替代方法。

票数 1
EN

Stack Overflow用户

发布于 2020-11-01 21:58:20

通过这种方式,该方法在您的活动中必然需要READ_PHONE_STATE,而不仅仅是清单>>>

代码语言:javascript
复制
// Check if the READ_PHONE_STATE permission is already available.


if(ActivityCompat.checkSelfPermission(this,Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED) {

            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    Manifest.permission.READ_PHONE_STATE)) {

                  //here >> use getNetworkType() method
              // like this example
 
              mStationInfo.set_networkType(mTelephonyManager.getNetworkType());
            } 
           else {}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62692649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档