【问题标题】:Change Phone state to Ringing when some event occurs发生某些事件时将电话状态更改为响铃
【发布时间】:2012-12-07 06:36:30
【问题描述】:

我正在开发一个应用程序,当某些事件发生时,我必须将我的电话状态更改为响铃,例如某个号码正在我的电话上呼叫。那可能吗?我对广播接收器有一些想法,它将事件广播到我的应用程序,然后我的应用程序将在我的手机上发出任何虚拟的假号码呼叫。请给我任何想法。是否可以?以及如何开始?

感谢任何帮助。谢谢!

【问题讨论】:

    标签: android broadcastreceiver telephony


    【解决方案1】:

    要更改为响铃,请使用 TelephonyManager、AudioManager 和 PhoneStateListener:

    {
      // USE AudioManager  for Settingringing from vibration
             AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);   
    
             switch (am.getRingerMode()) {   
                     case AudioManager.RINGER_MODE_VIBRATE:   
                     Log.i("MyApp","NORMAL mode");
                     am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                  break;   
                }     
    

    【讨论】:

      【解决方案2】:

      您可以添加此代码以在触发某些事件时进行调用。

            String Numb = "tel:" + "your number";
            Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(Numb));
            startActivity(intent);
      

      并为此向您的清单添加权限。

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

      【讨论】:

      • @Sharmilee...我实际上不想打电话...就像其他号码拨打我的电话一样。这样可以吗?
      • 好的..我可以通过自己的手机以编程方式拨打电话吗?你有这方面的吗?
      【解决方案3】:

      试试这样的

      public class Telephone extends BroadcastReceiver {
      
          private Context mContext;
          private Intent mIntent;
      
          @Override
          public void onReceive(Context context, Intent intent) {
              mContext = context;
              mIntent = intent;
              TelephonyManager tm = (TelephonyManager)              
                       context.getSystemService(Context.TELEPHONY_SERVICE);
              int events = PhoneStateListener.LISTEN_CALL_STATE;
              tm.listen(phoneStateListener, events);
          }
      
          private final PhoneStateListener phoneStateListener = 
                                                      new PhoneStateListener() {
              @Override
              public void onCallStateChanged(int state, String incomingNumber) {
                  String callState = "UNKNOWN";
                  switch (state) {
                  case TelephonyManager.CALL_STATE_IDLE:
      
                      break;
                  case TelephonyManager.CALL_STATE_RINGING:
                                      // DO YOUR WORK HERE
      
                      break;
                  case TelephonyManager.CALL_STATE_OFFHOOK:
                                if(incomingNumber.length() >0){
      
                                        // incoming call
                                       // DO YOUR WORK HERE when call is received
                                       // SEND SMS HERE
                                  }
                                 else{
                                            // outgoing call
                                    }
                      break;
                  }
      
                  super.onCallStateChanged(state, incomingNumber);
              }
          };
      
      }
      

      你需要注册一个 PhoneStateListener.LISTEN_CALL_STATE 来只接收

      BroadcastReceiver 内的来电。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-05
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多