2012-01-10 39 views
22

Chức năng của chương trình như sau: người dùng có danh sách số điện thoại, mà điện thoại chỉ có thể rung khi có cuộc gọi đến khi không có ứng dụng nào trên toàn hệ thống cung cấp rung (như vậy như ở chế độ tắt tiếng). Tôi biết rằng điều này là bằng cách nào đó chống lại các quy tắc, cho rằng một ứng dụng nên tôn trọng các thiết lập của người dùng, nhưng ứng dụng được giới hạn ở một số người dùng nhất định với nhu cầu này. Tôi đã thử hai cách nhưng không ai trong số họ là thỏa mãn:Cách rung tùy chỉnh cho các cuộc gọi đến cụ thể

  1. Nghe tình trạng điện thoại và trực tiếp kích hoạt các dịch vụ rung với mô hình của riêng tôi (với Vibrator.vibrate()). Phương pháp này có hiệu quả mà không có cuộc gọi đến nào được thực hiện ngẫu nhiên khi điện thoại ở trạng thái CALL_STATE_RINGING và tôi đoán đó là do xung đột với ứng dụng toàn hệ thống thực sự xử lý rung khi có cuộc gọi đến.

  2. Đánh giá liệu điện thoại có rung khi có cuộc gọi đến hay không (với AudioManager.shouldVibrate()) và quyết định có thay đổi cài đặt rung (với AudioManager.setRingerMode()AudioManager.setVibrateSetting()) hay không. Nếu cài đặt rung được thay đổi bởi ứng dụng của tôi, chúng sẽ được khôi phục sau khi điện thoại di động quay trở lại trạng thái CALL_STATE_IDLE. Phương pháp này, tuy nhiên, vẫn không hoạt động đôi khi, mà không có bất kỳ dấu hiệu của lý do.

Tôi hy vọng ai đó có thể đưa ra một số lời khuyên về vấn đề này. Bình luận về hai cách này hoặc gợi ý khác được hoan nghênh.

+0

Bất kỳ sự tiến bộ về điều đó? – Rizon

+2

@Rizon Đáng buồn là không, và câu hỏi này kiếm cho tôi một huy hiệu tumbleweed. – peter

+0

Điều này không giống nhau nhưng ai đó đã cố gắng vô hiệu hóa rung khi thực hiện cuộc gọi và điều đó là không thể, nhưng những phát hiện thú vị với bạn: http://stackoverflow.com/q/8065862/969325 – Warpzit

Trả lời

6

Bạn cần chơi với hai cài đặt để điện thoại của bạn rung. Người đầu tiên là chế độ âm thanh mà cần phải được thiết lập bằng cách sử dụng AufioManager:

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

Phần thứ hai không được ghi nhận đúng và tôi tin rằng đây là thiếu một phần của mã của bạn:

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

sử dụng 1 để bật chế độ rung và 0 để tắt rung.

để hiểu đầy đủ cách bạn nên làm việc với các thiết lập rung và chế độ có một cái nhìn tại liên kết sau: http://hi-android.info/src/com/android/settings/SoundSettings.java.html

+0

Cảm ơn câu trả lời của bạn! Nhưng đây không phải là những gì chặn máy rung, bởi vì 'vibrate_in_silent' đã được đặt thành 1. Có thể Phone.apk hủy rung ngay lập tức sau khi chúng tôi kích hoạt nó không? Theo [VibratorService.java] (http://androidxref.com/source/xref/frameworks/base/services/java/com/android/server/VibratorService.java), Vibrator sẽ hoạt động ngẫu nhiên trong tình huống này. Và điều này giải thích tại sao vấn đề chỉ xảy ra trên một số điện thoại di động: Phone.apk không phải là một phần của Hệ thống. – peter

+2

Bạn đã xem hàm setPhoneVibrateSettingValue trên liên kết ở trên chưa? Có một số sự phụ thuộc giữa hai thiết lập này nên được xử lý rất cẩn thận – Muzikant

+0

Sự phụ thuộc là điều mà tôi đã bỏ lỡ. Tôi sẽ thực hiện một số thử nghiệm trên nhiều thiết bị hơn cho sự phụ thuộc. Cảm ơn trước! +1 cho bạn. – peter

Các vấn đề liên quan