0

我正在嘗試構建一個安卓應用程序,當用戶在手機上晃動手時,使用接近傳感器開始振鈴/振動,從而使通話無聲。接近傳感器 - 沉默呼叫應用程序

我是新來的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"); 



    } 
} 


} 

在此先感謝:-)

回答

0

而不是

amanager.setRingerMode(0x00000000); 

嘗試

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

謝謝!但是靜音功能起作用。問題在於,只要手機開始響鈴,程序只檢查接近傳感器值,如果沒有任何物體覆蓋傳感器,則振鈴器不會消音。但我希望它繼續檢查,直到振鈴停止以改變接近傳感器的值。 – user2175058 2013-03-16 08:40:00