كيفية التعرف على ما إذا كان تم إعادة تحميل التطبيق بعد المكالمة الهاتفية؟

StackOverflow https://stackoverflow.com/questions/910028

  •  05-09-2019
  •  | 
  •  

سؤال

لدي برنامج يطلق تلقائيا مكالمة هاتفية عند بدء تشغيل البرنامج. يتم تنفيذ ذلك في "Appdelegate's" ApplicationDidfinishLaunching "-method.

المشكلة هي: عند انتهاء مكالمة هاتفية ويتم تشغيل تطبيقي تلقائيا مرة أخرى، يتم إعادة تشغيله بدء تشغيل حلقة واستدعاء الهاتف مرة أخرى.

كيفية التعرف على ما إذا تم إرجاع التطبيق من تلك المكالمة؟ أو بطريقة أو بأخرى بسهولة حفظ الحالة أو المتغيرات للبرنامج الذي يحدد ما إذا كانت المكالمة مصنوعة بالفعل؟

لقد بدأت للتو برمجة iPhone وجاء هذا.

هل كانت مفيدة؟

المحلول

قبل أن يتم تشغيل طلبك المكالمة الهاتفية، اقرأ أ BOOL العلم في تطبيق NSUserDefaults قاعدة البيانات التي تسأل ما إذا كان ينبغي أن يطلق تلك الدعوة، على سبيل المثال callWasMade.

إذا callWasMade يتم تعيين إلى الافتراضي الأولي من NO, ، ثم تعيين العلم إلى YES, ، حفظ قيمة العلم ل NSUserDefaults ثم يؤدي إلى مكالمة هاتفية.

على الإطلاق اللاحق للتطبيق الخاص بك، قيمة callWasMade (YES) قراءت من NSUserDefaults والمكالمة لا يتم تشغيلها.

في تلك المرحلة، يجب أن تكون آمنة لقلب قيمة العلم مرة أخرى NO للسماح للمكالمة التالية.

نصائح أخرى

هذا لا يمكن القيام به. فكرة العلم لطيفة حتى تدرك أنه لا تعيدك جميع المكالمات إلى التطبيق. أحد الأمثلة على ذلك هو إذا قمت بتعليق المكالمة عن طريق الضغط على زر الطاقة العلوي.

بالنسبة لتلك الحالات، ستكون العلم غير متناسقة (أي. عند الإطلاق التالي، سيعتقد أن التطبيق الخاص بك يعتقد أن هذا يعود من مكالمة عندما تم إطلاقه في الواقع من الشاشة الرئيسية).

لذلك لتلخيص عدم وجود طريقة للكشف عن العودة من الهاتف كلها واسألت عن دعم Apple Dev حول هذا الموضوع.

يمكنك استخدام UIWebView لإجراء مكالمة مثل موضح في هذا السؤال:

العودة إلى سلوك التطبيق بعد المكالمة الهاتفية مختلفة في الكود الأصلي من UiWebView

واستخدام الاتصال الهاتفي الأساسي للتحقق مما إذا كانت المكالمة المنتهية:

//before calling loadRequest:
CTCallCenter *callCenter.callEventHandler=^(CTCall* call) {

        if(call.callState == CTCallStateDialing)
        {
            //The call state, before connection is established, when the user initiates the call.
            NSLog(@"Dialing");
        }
        if(call.callState == CTCallStateIncoming)
        {
            //The call state, before connection is established, when a call is incoming but not yet answered by the user.
            NSLog(@"Incoming Call");
        }

        if(call.callState == CTCallStateConnected)
        {
            //The call state when the call is fully established for all parties involved.
            NSLog(@"Call Connected");
        }   

        if(call.callState == CTCallStateDisconnected)
        {
            [self release];
            NSLog(@"Call Ended");

        }

    };
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top