2013-06-07 10 views
1

я получил эту ошибку в моем LogCatHidden конструктор вызывается несколько раз в процессе

TelephonyManager : Hidden constructor called more than once per process! 

И мой PhoneListener не работает

@Override 
public void onCallStateChanged(int state, String incomingNumber) { 

         switch (state) { 
         case TelephonyManager.CALL_STATE_IDLE: 
          Log.e("state", "idle"); 
          break; 
         case TelephonyManager.DATA_CONNECTED: 
          Log.e("state", "connected"); 
          break; 
         } 
        }; 
       }; 

    telManager = (TelephonyManager) context 
      .getSystemService(Context.TELEPHONY_SERVICE); 
    telManager.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE); 

Это не напечатает мой журнал.

ответ

0

Из исходного кода я получил это:

/** Предоставляет доступ к информации об услугах телефонии на устройстве. Приложения могут использовать методы этого класса для определения услуг и состояний телефонии, а также для доступа к некоторым типам информации о подписчиках. Приложения также могут регистрировать слушателя для получения уведомлений об изменениях состояния телефонии.

Вы не создаете экземпляр этого класса напрямую; вместо этого вы получаете ссылку на экземпляр через {@link android.content.Context # getSystemService Context.getSystemService (Context.TELEPHONY_SERVICE)}. *

Обратите внимание, что доступ к некоторой информации о телефонии защищен правами. Приложение не может получить доступ к защищенной * информации, если у нее нет соответствующих разрешений, объявленных в файле манифеста. Если применяются разрешения, они отмечены в методах, с помощью которых вы получаете доступ к защищенной информации. **/

public class TelephonyManager { 

private static final String TAG = "TelephonyManager"; 

private static Context sContext; 
private static ITelephonyRegistry sRegistry; 

/** @hide */ 
public TelephonyManager(Context context) { 
    context = context.getApplicationContext(); 
    if (sContext == null) { 
     sContext = context; 

     sRegistry = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService(
       "telephony.registry")); 
    } else if (sContext != context) { 
     Log.e(TAG, "Hidden constructor called more than once per process!"); 
     Log.e(TAG, "Original: " + sContext.getPackageName() + ", new: " + 
       context.getPackageName()); 
    } 
} 

Вы создаете несколько экземпляров TelephonyManger из разных контекстов? Если это так, то журнал ошибок покажет, что контекст является статичным.

+0

По крайней мере, цитируйте, где вы получили свой ответ, чувак. Вот исходный источник, http://stackoverflow.com/a/9335205 –

Смежные вопросы