更新android上的未接来电通知

时间:2010-04-27 12:06:15

标签: android

我需要取消某个号码的未接来电通知。我在com.android.phone上看过NotificationMgr类,但我无法通过反射调用它。还有其他办法吗?

2 个答案:

答案 0 :(得分:4)

以下代码将取消未接来电通知。

要使方法正常工作,您必须获得AndroidManifest.xml中的MODIFY_PHONE_STATE权限,例如

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

在你的AndroidManifest.xml

String Log_Tag = "log";
try
    {
        Class serviceManagerClass = Class.forName("android.os.ServiceManager");
        Method getServiceMethod = serviceManagerClass.getMethod("getService", String.class);
        Object phoneService = getServiceMethod.invoke(null, "phone");
        Class ITelephonyClass = Class.forName("com.android.internal.telephony.ITelephony");
        Class ITelephonyStubClass = null;
        for(Class clazz : ITelephonyClass.getDeclaredClasses())
        {
            if (clazz.getSimpleName().equals("Stub"))
            {
                ITelephonyStubClass = clazz;
                break;
            }
        }
        if (ITelephonyStubClass != null)
        {
            Class IBinderClass = Class.forName("android.os.IBinder");
            Method asInterfaceMethod = ITelephonyStubClass.getDeclaredMethod("asInterface",
                    IBinderClass);
            Object iTelephony = asInterfaceMethod.invoke(null, phoneService);
            if (iTelephony != null)
            {
                Method cancelMissedCallsNotificationMethod = iTelephony.getClass().getMethod(
                        "cancelMissedCallsNotification");
                cancelMissedCallsNotificationMethod.invoke(iTelephony);
            }
            else
            {
                Log.w(LOG_TAG, "Telephony service is null, can't call "
                        + "cancelMissedCallsNotification");
            }
        }
        else
        {
            Log.d(LOG_TAG, "Unable to locate ITelephony.Stub class!");
        }
    } catch (ClassNotFoundException ex)
    {
        Log.e(LOG_TAG,
                "Failed to clear missed calls notification due to ClassNotFoundException!", ex);
    } catch (InvocationTargetException ex)
    {
        Log.e(LOG_TAG,
                "Failed to clear missed calls notification due to InvocationTargetException!",
                ex);
    } catch (NoSuchMethodException ex)
    {
        Log.e(LOG_TAG,
                "Failed to clear missed calls notification due to NoSuchMethodException!", ex);
    } catch (Throwable ex)
    {
        Log.e(LOG_TAG, "Failed to clear missed calls notification due to Throwable!", ex);
    }

原始链接是 http://sites.google.com/site/t2k269group/development-diary/reset-missed-calls-notification

如果有人知道如何使用反射来访问com.android.phone中的类,请告诉我。

答案 1 :(得分:1)

您不能影响任何其他应用程序的Notifications,更不用说一个未接来电。