2012-01-10 39 views
22

Program aşağıdaki gibi çalışır: kullanıcının, telefon sisteminin başka bir sistem genelinde herhangi bir titreşim sağlamayacağı durumlarda gelen bir çağrı üzerine titreşebileceği bir telefon numarası listesi vardır. sessiz modda olduğu gibi). Bunun bir şekilde kurallara aykırı olduğunu biliyorum, bunun için uygulamanın kullanıcı ayarlarına saygı göstermesi gerekir, ancak uygulama bu ihtiyacı olan bazı kullanıcılar tarafından sınırlandırılmıştır. Ben iki yol denedi ama ikisi de tatmin edici şunlardır:Belirli gelen çağrılar için özelleştirilmiş titreşim nasıl sağlanır

  1. telefon durumuna dinle doğrudan (Vibrator.vibrate() ile) kendi desenle titreşim hizmeti tetikler. Bu yöntem, telefon CALL_STATE_RINGING durumdayken rastgele etkili olmayan gelen çağrılar ile etkilidir ve sanırım bunun, gelen çağrı üzerine titreşimi gerçekten işleyen sistem genelindeki uygulama ile çakışmasıdır.

  2. Hakim cep telefonu (AudioManager.shouldVibrate() ile) gelen bir arama üzerine titreşimli ve (AudioManager.setRingerMode() ve AudioManager.setVibrateSetting() ile) titreşim ayarlarını değiştirmek için karar olup olmadığını. Titreşim ayarları uygulamam tarafından değiştirilirse, cep telefonu CALL_STATE_IDLE durumuna döndükten sonra geri yüklenir. Bununla birlikte, bu yöntem, bazen herhangi bir neden belirtmeksizin, bazen çalışmıyor.

Umarım bu konuda bazı önerilerde bulunabilir. Bu iki yolla veya başka bir öneriyle ilgili yorumlar kabul edilir.

+0

bu konuda herhangi bir ilerleme: Eğer titreşim ayarları ile çalışmalıdır ve mod aşağıdaki bağlantıda bakmak nasıl

tamamen anlamak için? – Rizon

+2

@Rizon Ne yazık ki hayır, ve bu soru bana bir tomar rozetini kazandırıyor. – peter

+0

Bu aynı değil ama birisi gelen aramalarda titreşimi devre dışı bırakmayı denedi ve imkansız olduğunu kanıtladı, ancak bulgular sizin için ilginç: http://stackoverflow.com/q/8065862/969325 – Warpzit

cevap

6

Telefonunuzun titremesi için iki ayar ile oynamanız gerekir. İlki AufioManager kullanarak ayarlanması gerekir ses modu:

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
audioManager.setRingerMode(targetSoundMode); 

ikinci bölümü düzgün belgelenmiş değildir ve ben bu kodun eksik parçası olduğuna inanıyoruz:

String VIBRATE_IN_SILENT_SETTING_NAME = "vibrate_in_silent"; 
Settings.System.putInt(getContentResolver(), VIBRATE_IN_SILENT_SETTING_NAME, 1); 

kullanımı Titreşim açmak için 1 ve titreşimi kapatmak için 0. http://hi-android.info/src/com/android/settings/SoundSettings.java.html

+0

Cevabınız için teşekkürler! Ancak bu vibratörün engellenmesi değil, çünkü 'vibrate_in_silent' zaten 1'e ayarlanmıştır. Phone.apk, tetikledikten hemen sonra Vibratör'ü iptal edebilir mi? [VibratorService.java] 'ya göre (http://androidxref.com/source/xref/frameworks/base/services/java/com/android/server/VibratorService.java), Vibratör bu durumda rastgele davranır. Ve bu, sorunun neden sadece bazı cep telefonlarında oluştuğunu açıklıyor: Phone.apk, Sistem'in bir parçası değil. – peter

+2

Yukarıdaki bağlantıda setPhoneVibrateSettingValue işlevine baktınız mı? Çok dikkatli ele alınması gereken bu iki ayar arasında bir bağımlılık var. – Muzikant

+0

Bağımlılık, kaçırdığım bir şey. Bağımlılık için daha fazla cihaz üzerinde bazı testler yapacağım. Şimdiden teşekkürler! + 1 sana. – peter