android - 发送广播 Intent SIM_STATE_CHANGED 失败

标签 android broadcastreceiver

我需要检查 Sim 卡状态并根据其状态执行多项操作。 根据我对BroadcastReceiver的理解,当Sim State改变时,会执行broadcastReceiver的onReceive方法。

这是 BroadcastReceiver 类:

public class SimStateListener extends BroadcastReceiver {
public SimStateListener() {
}

@Override
public void onReceive(Context context, Intent intent) {
    // TODO: This method is called when the BroadcastReceiver is receiving
    // an Intent broadcast.

    // Checks Sim card State
    TelephonyManager telephoneMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    int simState = telephoneMgr.getSimState();

    switch (simState) {
        case TelephonyManager.SIM_STATE_ABSENT:
            Log.i("SimStateListener", "Sim State absent");
            break;
        case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
            Log.i("SimStateListener", "Sim State network locked");
            break;
        case TelephonyManager.SIM_STATE_PIN_REQUIRED:
            Log.i("SimStateListener", "Sim State pin required");
            break;
        case TelephonyManager.SIM_STATE_PUK_REQUIRED:
            Log.i("SimStateListener", "Sim State puk required");
            break;
        case TelephonyManager.SIM_STATE_UNKNOWN:
            Log.i("SimStateListener", "Sim State unknown");
            break;
        case TelephonyManager.SIM_STATE_READY:
            Log.i("SimStateListener", "Sim State ready");
            String phoneNumber = telephoneMgr.getLine1Number();
            Log.i("SimStateListener", phoneNumber);
            Toast.makeText(context, phoneNumber, Toast.LENGTH_LONG).show();

            if(phoneNumber.equals(myPhoneNumber)){
                // do nothing
                break;
            }
            else{
                Log.i("SimStateListener", "Sim card is changed");
                // do something
                break;
            }
    }
}

}

这是我在 list 中放入的内容:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<receiver android:name="com.example.trackyourandroid.SimStateListener" android:enabled="true" android:exported="true" >
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
 </receiver>

这是我在 LogCat 中得到的内容:

12-18 08:08:29.420: W/BroadcastQueue(1303): Failure sending broadcast Intent { act=android.intent.action.SIM_STATE_CHANGED flg=0x20000010 (has extras) }
12-18 08:08:29.560: W/BroadcastQueue(1303): Failure sending broadcast Intent { act=android.intent.action.SIM_STATE_CHANGED flg=0x20000010 (has extras) }
12-18 08:08:29.710: W/BroadcastQueue(1303): Failure sending broadcast Intent { act=android.intent.action.SIM_STATE_CHANGED flg=0x20000010 (has extras) }
12-18 08:08:33.940: W/BroadcastQueue(1303): Failure sending broadcast Intent { act=android.intent.action.SIM_STATE_CHANGED flg=0x20000010 (has extras) }
12-18 08:08:33.980: W/BroadcastQueue(1303): Failure sending broadcast Intent { act=android.intent.action.SIM_STATE_CHANGED flg=0x20000010 (has extras) }
12-18 08:08:34.000: W/BroadcastQueue(1303): Failure sending broadcast Intent { act=android.intent.action.SIM_STATE_CHANGED flg=0x20000010 (has extras) }
12-18 08:08:35.680: W/BroadcastQueue(1303): Failure sending broadcast Intent { act=android.intent.action.SIM_STATE_CHANGED flg=0x20000010 (has extras) }
12-18 08:08:35.850: W/BroadcastQueue(1303): Failure sending broadcast Intent { act=android.intent.action.SIM_STATE_CHANGED flg=0x20000010 (has extras) }
12-18 08:08:35.860: W/BroadcastQueue(1303): Failure sending broadcast Intent { act=android.intent.action.SIM_STATE_CHANGED flg=0x20000010 (has extras) }

堆栈跟踪:

    12-18 10:53:18.850: E/ActivityManager(2170): ANR in com.android.systemui
    12-18 10:53:18.850: E/ActivityManager(2170): PID: 2221
    12-18 10:53:18.850: E/ActivityManager(2170): Reason: Broadcast of Intent { act=android.intent.action.TIME_TICK flg=0x50000014 (has extras) }
    12-18 10:53:18.850: E/ActivityManager(2170): Load: 6.4 / 2.12 / 1.02
    12-18 10:53:18.850: E/ActivityManager(2170): CPU usage from 3482ms to -8134ms ago:
    12-18 10:53:18.850: E/ActivityManager(2170):   38% 2170/system_server: 25% user + 13% kernel / faults: 1455 minor 10 major
    12-18 10:53:18.850: E/ActivityManager(2170):   15% 2330/com.android.launcher: 12% user + 3.3% kernel / faults: 2121 minor 10 major
    12-18 10:53:18.850: E/ActivityManager(2170):   14% 2151/surfaceflinger: 6.2% user + 8% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   13% 2319/com.android.phone: 8.9% user + 4.8% kernel / faults: 831 minor 3 major
    12-18 10:53:18.850: E/ActivityManager(2170):   6.6% 2221/com.android.systemui: 4.3% user + 2.2% kernel / faults: 639 minor 6 major
    12-18 10:53:18.850: E/ActivityManager(2170):   2.8% 2161/bootanimation: 0.9% user + 1.9% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   1.2% 25/mtdblock0: 0% user + 1.2% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   1.5% 59/adbd: 0% user + 1.4% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   1% 12/kswapd0: 0% user + 1% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   0.7% 2300/com.android.settings: 0.5% user + 0.2% kernel / faults: 345 minor 1 major
    12-18 10:53:18.850: E/ActivityManager(2170):   0.7% 2367/android.process.acore: 0.4% user + 0.3% kernel / faults: 80 minor 1 major
    12-18 10:53:18.850: E/ActivityManager(2170):   0.3% 48/rild: 0.2% user + 0.1% kernel / faults: 16 minor
    12-18 10:53:18.850: E/ActivityManager(2170):   0.5% 2347/com.android.printspooler: 0% user + 0.5% kernel / faults: 104 minor
    12-18 10:53:18.850: E/ActivityManager(2170):   0.3% 284/logcat: 0.1% user + 0.1% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   0.3% 1502/kworker/0:0: 0% user + 0.3% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   0.2% 1//init: 0.1% user + 0% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   0.1% 26/mtdblock1: 0% user + 0.1% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   0% 3/ksoftirqd/0: 0% user + 0% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   0% 43/servicemanager: 0% user + 0% kernel
    12-18 10:53:18.850: E/ActivityManager(2170): 100% TOTAL: 61% user + 38% kernel + 0% softirq
    12-18 10:53:18.850: E/ActivityManager(2170): CPU usage from 6733ms to 7312ms later:
    12-18 10:53:18.850: E/ActivityManager(2170):   31% 2170/system_server: 16% user + 15% kernel / faults: 65 minor
    12-18 10:53:18.850: E/ActivityManager(2170):     11% 2185/ActivityManager: 3.7% user + 7.5% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     6.3% 2181/Binder_1: 5% user + 1.2% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     3.7% 2182/Binder_2: 2.5% user + 1.2% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     2.5% 2177/Compiler: 1.2% user + 1.2% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     2.5% 2345/Binder_5: 1.2% user + 1.2% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     2.5% 2346/Binder_6: 0% user + 2.5% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     2.5% 2362/Binder_8: 1.2% user + 1.2% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     1.2% 2251/Binder_3: 1.2% user + 0% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   15% 2319/com.android.phone: 11% user + 3.6% kernel / faults: 51 minor
    12-18 10:53:18.850: E/ActivityManager(2170):     8% 2319/m.android.phone: 5.8% user + 2.2% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     2.9% 2326/Compiler: 2.2% user + 0.7% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     2.9% 2381/RILReceiver: 2.9% user + 0% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     1.4% 2380/RILSender: 0.7% user + 0.7% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   13% 2330/com.android.launcher: 8.4% user + 4.9% kernel / faults: 567 minor 8 major
12-18 10:53:18.850: E/ActivityManager(2170):     11% 2330/ndroid.launcher: 7.7% user + 3.5% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     1.4% 2334/GC: 0% user + 1.4% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     0.7% 2339/Compiler: 0.7% user + 0% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   10% 2221/com.android.systemui: 9.1% user + 1.4% kernel / faults: 112 minor
    12-18 10:53:18.850: E/ActivityManager(2170):     9.8% 2221/ndroid.systemui: 7.7% user + 2.1% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     0.7% 2228/Compiler: 0.7% user + 0% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   2.8% 2151/surfaceflinger: 0.7% user + 2.1% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     1.4% 2156/DispSync: 0.7% user + 0.7% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     0.7% 2151/surfaceflinger: 0% user + 0.7% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     0.7% 2166/Binder_4: 0% user + 0.7% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   1.3% 48/rild: 0.6% user + 0.6% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     1.3% 76/rild: 0.6% user + 0.6% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   1.7% 12/kswapd0: 0% user + 1.7% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):   1.5% 59/adbd: 0% user + 1.5% kernel
    12-18 10:53:18.850: E/ActivityManager(2170):     1.5% 279/adbd: 0% user + 1.5% kernel
    12-18 10:53:18.850: E/ActivityManager(2170): 100% TOTAL: 62% user + 37% kernel
    12-18 10:53:21.560: E/InputDispatcher(2170): channel 'b3fdc490 StatusBar (server)' ~ Channel is unrecoverably broken and will be disposed!
    12-18 10:53:21.570: E/InputDispatcher(2170): channel 'b40044f8 Keyguard (server)' ~ Channel is unrecoverably broken and will be disposed!
    12-18 10:53:23.030: E/gralloc_goldfish(2151): gralloc_alloc: Mismatched usage flags: 480 x 800, usage b33
    12-18 10:53:23.080: E/(2151): GraphicBufferAlloc::createGraphicBuffer(w=480, h=800) failed (Invalid argument), handle=0x0
    12-18 10:53:23.140: E/BufferQueue(2151): [ScreenshotSurface] dequeueBuffer: SurfaceComposer::createGraphicBuffer failed
    12-18 10:53:28.070: E/SoundPool(2424): error loading /system/media/audio/ui/Lock.ogg
    12-18 10:53:28.110: E/SoundPool(2424): error loading /system/media/audio/ui/Unlock.ogg
    12-18 10:53:29.420: E/BluetoothAdapter(2300): Bluetooth binder is null
    12-18 10:53:35.860: E/NetdConnector(2170): NDC Command {12 bandwidth setiquota eth0 9223372036854775807} took too long (2654ms)
    12-18 10:53:39.770: E/BluetoothAdapter(2424): Bluetooth binder is null
    12-18 10:53:39.770: E/BluetoothAdapter(2424): Bluetooth binder is null
    12-18 10:53:39.960: E/BluetoothAdapter(2424): Bluetooth binder is null
    12-18 10:53:40.680: E/BluetoothAdapter(2424): Bluetooth binder is null
    12-18 10:53:42.740: E/BluetoothAdapter(2424): Bluetooth binder is null
    12-18 10:53:43.040: E/ConnectivityService(2170): startUsingNetworkFeature took too long: 8936ms
    12-18 10:53:44.840: E/logwrapper(2487): executing /system/bin/ip failed: No such file or directory
    12-18 10:53:45.260: E/NetdConnector(2170): NDC Command {18 interface fwmark exempt add 10.0.2.2/32} took too long (837ms)
    12-18 10:53:45.360: E/JavaBinder(2424): *** Uncaught remote exception!  (Exceptions are not yet supported across processes.)
    12-18 10:53:45.360: E/JavaBinder(2424): java.lang.RuntimeException: android.os.DeadObjectException
    12-18 10:53:45.360: E/JavaBinder(2424):     at android.os.Parcel.writeException(Parcel.java:1362)
    12-18 10:53:45.360: E/JavaBinder(2424):     at android.os.Binder.execTransact(Binder.java:410)
    12-18 10:53:45.360: E/JavaBinder(2424):     at dalvik.system.NativeStart.run(Native Method)
    12-18 10:53:45.360: E/JavaBinder(2424): Caused by: android.os.DeadObjectException
    12-18 10:53:45.360: E/JavaBinder(2424):     at android.os.BinderProxy.transact(Native Method)
    12-18 10:53:45.360: E/JavaBinder(2424):     at android.content.IIntentReceiver$Stub$Proxy.performReceive(IIntentReceiver.java:124)
    12-18 10:53:45.360: E/JavaBinder(2424):     at android.app.ActivityThread$ApplicationThread.scheduleRegisteredReceiver(ActivityThread.java:823)
    12-18 10:53:45.360: E/JavaBinder(2424):     at android.app.ApplicationThreadNative.onTransact(ApplicationThreadNative.java:394)
    12-18 10:53:45.360: E/JavaBinder(2424):     at android.os.Binder.execTransact(Binder.java:404)
    12-18 10:53:45.360: E/JavaBinder(2424):     ... 1 more

我无法在 LogCat 中打印任何内容,也没有看到任何 Toast 出现。

你能告诉我我做错了什么吗?

最佳答案

你的 Intent 过滤器是错误的,尝试使用这个:

<intent-filter>             
            <action android:name="android.intent.action.SIM_STATE_CHANGED" />
</intent-filter>

关于android - 发送广播 Intent SIM_STATE_CHANGED 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20662178/

相关文章:

Android:这两个操作我应该使用AsyncTask吗?

java - 让代码在 x 秒后执行 - Java、Android

android - 通知 deleteIntent 不起作用

android - 如何在android中手动停止BroadcastReceiver

启动时的 Android BroadcastReceiver - 当 Activity 处于后台时继续运行

java - 我可以在自身内部存储 Activity 或 Fragment 的静态实例吗?

java - Gradle 构建失败,出现 java.lang.IllegalStateException : Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $

java - BitmapFactory 解码流在 ListView 中不起作用

javascript - UWP webView 相当于 Android 中的 addJavascriptInterface()

android - CONNECTIVITY_CHANGE 在 Android N 的目标中已弃用