الروبوت - وقف NEW_OUTGOING_CALL الأحداث من حلقات?

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

  •  03-07-2019
  •  | 
  •  

سؤال

لدي BroadcastReceiver اصطياد ACTION_NEW_OUTGOING_CALL أحداث.

في onReceive() طريقة سأرسل الموردة عدد جديد ListActivity, حيث يحصل المستخدم على اختيار مختلف الوجهة الجديدة أرقام من قائمة.

عندما يقوم المستخدم بتحديد عدد جديد من القائمة أنا ثم البدء من جديد ACTION_CALL نوايا مع عدد جديد في URI المجال.بدلا من ذلك, فإن النتيجة قد تكون العدد الأصلي.

مهما كان الرقم الجديد ، يجب أن يكون طلبه على الفور و لم تتم معالجة أي زيادة.

كيف يمكنني السماح BroadcastReceiver أعرف أن هذا الرقم الناتج لا ينبغي معالجتها مرة أخرى ؟

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

المحلول

وأنا حل هذا من خلال تنفيذ "تجاوز البادئة" في بلدي BroadcastReceiver. إذا التطبيق موكلي يريد الاتصال برقم مباشرة ببساطة بإلحاق البادئة قبل استدعاء نية ACTION_CALL.

وإذا كان الرقم المطلوب لديه (الثابت ترميز) البادئة، وBroadcastReceiver يجرد بادئة ويسمح للدعوة ليمضي في عمله كالمعتاد:

public void onReceive(Context context, Intent intent)
{
    String action = intent.getAction();
    if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {
        String number = getResultData();
        if (number.startsWith(BYPASS_PREFIX)) {
             setResultData(number.substring(BYPASS_PREFIX.length()));
        } else {
             // do additional processing
        }
    }
}

وهذا لا يحل مشكلتين في آن واحد - وهذا لا وقف حلقات الدعوة، وأنه يعطي لي أيضا وسيلة لتجاوز معالجة إضافية لأرقام محددة عن طريق تخزين البادئة في مشاركاتهم دليل الهاتف

نصائح أخرى

على onReceive (طريقة) في استقبال البث يتلقى النية حجة.استخراج حزمة من القصد باستخدام القصد.getExtras().هذه حزمة تحتوي على 3 أزواج قيمة المفتاح كما يلي :

  1. الروبوت.الهاتف.اضافية.ALREADY_CALLED = null
  2. الروبوت.القصد.اضافية.PHONE_NUMBER = 98xxxxxx98
  3. الروبوت.الهاتف.اضافية.ORIGINAL_URI = رقم الهاتف:98xxxxxx98

98xxxxxx98 هو الرقم المطلوب من قبل المستخدم.

عندما onReceive() يسمى مرة أخرى هذا العدد التغييرات 98xxxxxx98* أو 0* عن طريق التحقق من العلامة النجمية(*) في نهاية طلبه العدد ، ويمكن الاستدلال إذا كان onReceive() وتسمى طريقة للمرة الأولى أو بعد المرات اللاحقة.

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