首页 > 解决方案 > TelephonyManager 为所有参数抛出错误。用户 10449 不满足访问设备标识符的要求

问题描述

我是 Android Studio 和电话经理的新手。我开始了一个项目,我需要在其中找到设备详细信息,例如单元信息、单元位置、设备 IMEI、SIM 序列号等。我的目标设备是 Jellybean 和更大。我使用“字符串 ID =tm.getImei();” 对于所有可用参数,并在 android manifest 中提供手机状态权限。构建和安装成功,但应用程序很快就会崩溃。

Java主文件:-

package com.example.celldetails;

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

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.telephony.CellInfo;
import android.telephony.CellLocation;
import android.telephony.TelephonyManager;
import android.widget.Switch;
import android.widget.TextView;

import java.util.List;

public class MainActivity extends AppCompatActivity {
    TextView tv;

    @RequiresApi(api = Build.VERSION_CODES.Q)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.textview1);
        TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        String ID =tm.getImei();
        String SIMserialno = tm.getSimSerialNumber();
        String netcountry = tm.getNetworkCountryIso();
        String simcountry = tm.getSimCountryIso();
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        String voicemailno = tm.getVoiceMailNumber();
        String strphonetype=" ";
        String operator=tm.getSimOperatorName();
        List<CellInfo> cellinfo=tm.getAllCellInfo();
        CellLocation cellinfo2=tm.getCellLocation();
        int phonetype=tm.getPhoneType();
        switch (phonetype)
        {
            case (TelephonyManager.PHONE_TYPE_CDMA):
                strphonetype="CDMA";
                break;
            case (TelephonyManager.PHONE_TYPE_GSM):
                strphonetype="GSM";
                break;
            case(TelephonyManager.PHONE_TYPE_NONE) :
                strphonetype="None";
                break;
        }
String strsimstate="";
        int simsstate=tm.getSimState();
        switch (simsstate)
        {
            case (TelephonyManager.SIM_STATE_ABSENT):
                strphonetype="sim state is missing";
                break;
            case (TelephonyManager.SIM_STATE_NETWORK_LOCKED):
                strsimstate="sim state network is locked";
                break;
            case (TelephonyManager.SIM_STATE_READY):
                strsimstate="sim state is ready";
                break;
            case (TelephonyManager.SIM_STATE_UNKNOWN):
                strsimstate="state is unknown";
                break;
        }

        boolean isroaming=tm.isNetworkRoaming();
        String detail="Phone State Detail";
        detail=detail+"\n IMEI Number:-"+ID;
        detail=detail+"\nSIM Serial Number="+SIMserialno;
        detail=detail+"\nNetwork Country ISO="+netcountry;
        detail=detail+"\nSIM Country ISO="+simcountry;
        detail=detail+"\nVoice Mail Number="+voicemailno;
        detail=detail+"\nRoaming="+isroaming;
        detail=detail+"\nNetwork Type"+strphonetype;
        detail=detail+"\nSim State="+strsimstate;
        detail=detail+"\nOperator Name="+operator;
        detail=detail+"\nCell Info="+cellinfo;
        detail=detail+"\nCell Location"+cellinfo2;
        tv.setText(detail);
    }
}

Android清单文件:-

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.celldetails">

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
        tools:ignore="ProtectedPermissions" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.CellDetails">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

运行错误:-

08/21 09:29:50:在三星 SM-M515F 上启动“应用程序”。安装成功在 16 秒 516 毫秒内完成。$ adb shell am start -n "com.example.celldetails/com.example.celldetails.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER 连接到设备'samsung-sm_m515f上的进程20160 -RZ8N91E8TPM'。从应用程序捕获和显示 logcat 消息。可以在“调试器”设置页面的“Logcat 输出”部分禁用此行为。D/ActivityThread: handleBindApplication()++ app=com.example.celldetails D/ActivityThread: handleBindApplication() -- skipGraphicsSupport=false ActivityThread::handleMakeApplication() data=AppBindData{appInfo=ApplicationInfo{a47c78a com.example.celldetails}} appContext=android.app.ContextImpl@e1831fb appContext.mOpPackageName=com.example。允许)W/ple.celldetail:访问隐藏方法 Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V(灰名单,反射,允许) D/AndroidRuntime:关闭 VM E/AndroidRuntime:致命异常:主进程:com.example .celldetails, PID: 20160 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.celldetails/com.example.celldetails.MainActivity}: java.lang.SecurityException: getIccSerialNumber: 用户 10449 不符合要求访问设备标识符。在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3792) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3968) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android。 app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307) 在 android.os.Handler.dispatchMessage(Handler.java:106 ) 在 android.os.Looper.loop(Looper.java:246) 在 android.app.ActivityThread.main(ActivityThread.java:8506) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android。 internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 原因:java.lang.SecurityException: getIccSerialNumber: The user 10449 does不满足访问设备标识符的要求。在 android.os.Parcel.createExceptionOrNull(Parcel.java:2385) 在 android.os.Parcel.createException(Parcel.java:2369) 在 android.os.Parcel.readException(Parcel.java:2352) 在 android.os。包裹。servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307) 在 android.os .Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:246) 在 android.app.ActivityThread.main(ActivityThread.java:8506) 在 java.lang.reflect.Method。在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130) 的 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 调用(本机方法) I/Process:发送信号。PID:20160 SIG:9 handleMessage(ActivityThread.java:2307) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:246) 在 android.app.ActivityThread.main(ActivityThread.java :8506) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130) I/Process:发送信号。PID:20160 SIG:9 handleMessage(ActivityThread.java:2307) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:246) 在 android.app.ActivityThread.main(ActivityThread.java :8506) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602) 在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130) I/Process:发送信号。PID:20160 SIG:9 1130) I/Process:发送信号。PID:20160 SIG:9 1130) I/Process:发送信号。PID:20160 SIG:9

标签: javaandroidandroid-studiotelephonytelephonymanager

解决方案


推荐阅读