2010-04-27 7 views

Répondre

4

Le code ci-dessous annule la notification d'appel manqué.

Pour obtenir le travail de la méthode correctement, vous devez obtenir l'autorisation de MODIFY_PHONE_STATE dans AndroidManifest.xml comme

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

dans votre 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); 
    } 

Le lien d'origine est http://sites.google.com/site/t2k269group/development-diary/reset-missed-calls-notification

Si certains savent utiliser la réflexion pour accéder à la classe dans com.android.phone, dites-moi s'il vous plaît.

+0

Toute personne utilisant ceci pose des problèmes, car il peut ne pas fonctionner sur toutes les versions d'Android (passé/présent/futur) et il peut ne pas fonctionner sur tous les appareils Android. – CommonsWare

+1

C'est correct - le code semble échouer sur 2.3.x. –

1

Vous ne pouvez affecter aucune autre application Notifications d'une autre application, et encore moins une pour les appels manqués.

+0

Bien que je suis d'accord avec CommonsWare que vous ne pouvez pas/ne devez pas annuler d'autres notifications d'applications, le code ci-dessus fonctionne pour annuler la notification d'appels manqués stock. Merci :) –

Questions connexes