Я хотел создать приложение, которое снижает входящий звонок на основе некоторых настроек, что кажется невозможным на Android 1.6. Поэтому я решил написать приложение, которое изменяет Ringer для отключения звука, когда вызов будет удален. Дело в том, что когда я вызываю getSystemService (Context.AUDIO_SERVICE), я получаю исключение.Исключение из getSystemService (Context.AUDIO_SERVICE)
Это мои классы:
CallReceiver
public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MyPhoneStateListener phoneListener = new MyPhoneStateListener();
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
MyPhoneStateListener
public class MyPhoneStateListener extends PhoneStateListener {
public void onCallStateChanged(int state, String incomingNumber){
if (state == TelephonyManager.CALL_STATE_RINGING)
{
Log.d("DEBUG", "RINGING");
(new TMLService()).ManageIncomingCall(incomingNumber);
}
}
}
И есть класс называется TMLService, который расширяет службу, которая содержит этот метод
public void ManageIncomingCall(String incomingNumber)
{
super.onCreate();
AudioManager audioManage = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManage.setRingerMode(AudioManager.RINGER_MODE_SILENT);
}
Как я уже сказал, когда я вызываю AudioManager audioManage = (AudioManager) getSystemService (Context.AUDIO_SERVICE); приложение останавливается, и это то, что я получаю в LogCat:
D/DEBUG ( 356): RINGING
D/AndroidRuntime( 356): Shutting down VM
W/dalvikvm( 356): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
E/AndroidRuntime( 356): Uncaught handler: thread main exiting due to uncaught exception
D/CallNotifier( 103): RINGING... (new)
E/AndroidRuntime( 356): java.lang.NullPointerException
E/AndroidRuntime( 356): at android.content.ContextWrapper.getSystemService(ContextWrapper.java:335)
E/AndroidRuntime( 356): at tml.v1.Service.TMLService.ManageIncomingCall(TMLService.java:94)
E/AndroidRuntime( 356): at tml.v1.Service.MyPhoneStateListener.onCallStateChanged(MyPhoneStateListener.java:14)
E/AndroidRuntime( 356): at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:298)
E/AndroidRuntime( 356): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 356): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 356): at android.app.ActivityThread.main(ActivityThread.java:4203)
E/AndroidRuntime( 356): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 356): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 356): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
E/AndroidRuntime( 356): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
E/AndroidRuntime( 356): at dalvik.system.NativeStart.main(Native Method)
D/CallNotifier( 103): onNewRingingConnection(): incoming
Я собираюсь вознаградить вас за очки, потому что вы действительно объяснили, что произошло ... но я исправил его прошлой ночью и сразу заснул. В конце концов, все, что мне нужно было сделать, это попросить службу в другом классе вместо создания нового. @ MyPhoneStateListener tml.v1.UI.MainActivity.GetService(). ManageIncomingCall (incomingNumber); – PedroC88
Спасибо :) Я рад, что у вас это работает. –