2014-07-03 33 views
1

经过长时间的搜索,我无法解决我的问题。关闭随机拨打电话的声音

在我的应用程序中,我想用白名单默默控制来电号码。

这是使用的代码,有时它是完美的,但不是每次都有效。 振铃模式已恢复,我可以控制它,当我推动上限或下限音量控制,但没有声音输出到设备。

手机响铃时是否可以更改铃声模式? 我的测试是在S3 4.3

感谢您的时间来帮助我。

public class CallReceiver extends BroadcastReceiver { 

private static final String TAG = CallReceiver.class.getSimpleName(); 
private static final String EMERGENCY="112"; 
private ITelephony telephonyService; 
private AudioManager maudio; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (intent.getAction().equals("android.intent.action.PHONE_STATE")) { 

       AudioManager maudio=(AudioManager)context.getSystemService(context.AUDIO_SERVICE); 
      //backup audio setting before mute 
       Integer ringcheck=maudio.getRingerMode(); 

      String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

      if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } else if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
       // Incoming call 

       //set mute before control allowed/denied 
       maudio.setRingerMode(0); 

       String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
       if(!Control.AuthorizeSender(context,"in","CALL",incomingNumber,"Phone call.")) 
       { 

        TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
         try { 
         Class c = Class.forName(telephony.getClass().getName()); 
         Method m = c.getDeclaredMethod("getITelephony"); 
         m.setAccessible(true); 
         telephonyService = (ITelephony) m.invoke(telephony); 
         telephonyService.endCall(); 
         } catch (Exception e) { 
         e.printStackTrace(); 
         } 
       } 
       else 
       { 
        try { 
         Thread.sleep(1000); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 

       //restore audio 
       if (ringcheck == 1) 
        maudio.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); 
       else if (ringcheck == 2) 
        maudio.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 

      } else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
       Log.d(TAG,"Offhook"); 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 

     } 
    } 
} 

权限

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.CALL_PHONE" /> 
+0

嗨,没有人有这个问题?谢谢 – spaceworld

回答

0

权限:

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

代码:

// Disable ringtone & vibration 
AudioManager am = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE); 
int ringerMode = am.getRingerMode(); 
am.setRingerMode(AudioManager.RINGER_MODE_SILENT); 

... doing something ... 

// Restore ringtone settings after check 
am.setRingerMode(ringerMode);