我想创建一个基于某些设置挂断来电的应用程序,这在 Android 1.6 上似乎是不可能的。所以我决定编写一个应用程序,在通话被挂断时将铃声更改为静音。问题是当我调用 getSystemService(Context.AUDIO_SERVICE) 时出现异常。
这些是我的课:
接听电话
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 的类扩展了包含此方法的 Service
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