0

すべての通話を選択し、事前に録音された音声を相手に再生して電話を切るAndroidアプリケーションを作成するタスクを実行する必要があります。出来ますか?

スケルトンコードは大歓迎です。

4

2 に答える 2

0

これは私が書いたコードです:

public class AutoAnswerIntentService extends IntentService {

        public AutoAnswerIntentService() {
                super("AutoAnswerIntentService");
        }

        @Override
        protected void onHandleIntent(Intent intent) {
                Context context = getBaseContext();

                // Load preferences
                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
                BluetoothHeadset bh = null;
                if (prefs.getBoolean("headset_only", false)) {
                        bh = new BluetoothHeadset(this, null);
                }

                // Let the phone ring for a set delay
                try {
                        Thread.sleep(Integer.parseInt(prefs.getString("delay", "2")) * 1000);
                } catch (InterruptedException e) {
                        // We don't really care
                }

                // Check headset status right before picking up the call
                if (prefs.getBoolean("headset_only", false) && bh != null) {
                        if (bh.getState() != BluetoothHeadset.STATE_CONNECTED) {
                                bh.close();
                                return;
                        }
                        bh.close();
                }

                // Make sure the phone is still ringing
                TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
                if (tm.getCallState() != TelephonyManager.CALL_STATE_RINGING) {
                        return;
                }

                // Answer the phone
                try {
                        answerPhoneAidl(context);
                }
                catch (Exception e) {
                        e.printStackTrace();
                        Log.d("AutoAnswer","Error trying to answer using telephony service.  Falling back to headset.");
                        answerPhoneHeadsethook(context);
                }

                // Enable the speakerphone
                if (prefs.getBoolean("use_speakerphone", false)) {
                        enableSpeakerPhone(context);
                }
                return;
        }

        private void enableSpeakerPhone(Context context) {
                AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
                audioManager.setSpeakerphoneOn(true);
        }

        private void answerPhoneHeadsethook(Context context) {
                // Simulate a press of the headset button to pick up the call
                Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON);             
                buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK));
                context.sendOrderedBroadcast(buttonDown, "android.permission.CALL_PRIVILEGED");

                // froyo and beyond trigger on buttonUp instead of buttonDown
                Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON);               
                buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK));
                context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED");
        }

        @SuppressWarnings("unchecked")
        private void answerPhoneAidl(Context context) throws Exception {
                // Set up communication with the telephony service (thanks to Tedd's Droid Tools!)
                TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
                Class c = Class.forName(tm.getClass().getName());
                Method m = c.getDeclaredMethod("getITelephony");
                m.setAccessible(true);
                ITelephony telephonyService;
                telephonyService = (ITelephony)m.invoke(tm);

                // Silence the ringer and answer the call!
                telephonyService.silenceRinger();
                telephonyService.answerRingingCall();
        }
}
于 2012-09-07T05:55:41.530 に答える
0

いいえ、スピーカー以外の方法で再生することはできません。したがって、「サイレント自動応答」アプリなどを作成することはできません。アプリがユーザーに代わってそれを知らない方法で「話す」ことを許可しないのは意図的だと思います

于 2012-09-06T10:45:27.407 に答える