接近传感器 - 沉默呼叫应用程序

问题描述:

我正在尝试构建一个安卓应用程序,当用户在手机上晃动手时,使用接近传感器开始振铃/振动,从而使通话无声。接近传感器 - 沉默呼叫应用程序

我是新来的android开发。 我试图让应用程序检查手机是否处于状态Rining中。如果是,那么应用程序检查接近传感器的值是否为0(接近值)。如果接近传感器的值为0,则意味着传感器在振铃广告期间覆盖,因此应该使呼叫静音。 但它仍处于响铃状态。

我认为问题在于ServiceReceiver只是在手机开始振铃时才检查接近传感器的值。如果此时传感器值不为零,则手机不会消音。 那么我怎样才能让它在整个振铃或来电时检查接近传感器的值的变化,以便一旦传感器值变为零,呼叫就被静音

第一类“mainactivity”包含代码用于接近传感器。

package example.ringcheck; 


import android.app.Activity; 
import android.content.Context; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.media.AudioManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.TextView; 

public class MainActivity extends Activity implements SensorEventListener { 
static TextView proxText; 
SensorManager sm; 
Sensor proxSensor; 
static float proxValue = 8; 
// static boolean muteCall = false; 
private AudioManager amanager; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    sm = (SensorManager) getSystemService(SENSOR_SERVICE); 
    proxSensor = sm.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
    proxText = (TextView) findViewById(R.id.ProximityTextView); 

    sm.registerListener(this, proxSensor, SensorManager.SENSOR_DELAY_NORMAL); 

} 



@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

@Override 
public void onAccuracyChanged(Sensor arg0, int arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onSensorChanged(SensorEvent event) { 


    // TODO Auto-generated method stub 
    proxText.setText(String.valueOf(event.values[0])); 
    proxValue = event.values[0]; 
    Log.d("SENSOR VALUE", "********" + proxValue + "*******"); 



    } 

} 

第二类“ServiceReceiver”包含接近传感器的代码。

package example.ringcheck; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.media.AudioManager; 
import android.telephony.TelephonyManager 
import android.util.Log; 

public class ServiceReceiver extends BroadcastReceiver { 

private AudioManager amanager; 
// static boolean isRinging = false; 

public void onReceive(Context context, Intent intent) { 

    if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
      TelephonyManager.EXTRA_STATE_RINGING)) { 
     // isRinging = true; 
      if (MainActivity.proxValue == 0) { 
       amanager = (AudioManager) context 
         .getSystemService(Context.AUDIO_SERVICE); 
       amanager.setRingerMode(0x00000000); 
       // isRinging = false; 

      } 

    Log.d("MPR", "Its Ringing"); 



    } 
} 


} 

在此先感谢:-)

而不是

amanager.setRingerMode(0x00000000); 

尝试

amanager.setStreamMute(AudioManager.STREAM_RING, true); 
+0

谢谢!但是静音功能起作用。问题在于,只要手机开始响铃,程序只检查接近传感器值,如果没有任何物体覆盖传感器,则振铃器不会消音。但我希望它继续检查,直到振铃停止以改变接近传感器的值。 – user2175058 2013-03-16 08:40:00