سؤال

لقد طورت تطبيقًا يتلقى بثًا ثم يطلق Activity, ، أين هذا Activity الاستعلامات أ ContentProviderالذي يسحب المعلومات من DNS في الوقت الفعلي.

أود أن أكون قادرًا على خلط هذا الأمر بحيث بدلاً من الذهاب:

BroadcastReceiver.onReceive() {
  Intent intent = new Intent(...);
  intent.setData(...); // set a single String data
  context.startActivity(intent);
}

Activity.onCreate() {
  String value = intent.getData();  // get the String data
  Cursor = ContentProvider.query(search);
  ...
  setContentView(...);
}

يذهب:

BroadcastReceiver.onReceive() {
  Cursor = ContentProvider.query(...);
  if (cursor != null) {
     Intent intent = new Intent(...);
     // how do I pass the cursor?
     getContext().startActivity(intent);
  }
}

Activity.onCreate() {
  // how do I retrieve the cursor?
  setContentView(...);
}

أي إذا query() لا تُرجع أي بيانات أريد أن أفقد إطلاقهاActivity, ، والسماح لرسالة البث أن تسقط من خلال المعتاد.

إذا query() هل يعيد البيانات ، أريد ذلك Cursor لتزويد Activity, ، حتى لا أضطر إلى الذهاب والاستعلام عن البيانات مرة أخرى.

بدوره ، Activity لديه واجهة المستخدم الخاصة التي يحتاج المستخدم للرد عليها.

هل هذا ممكن؟

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

المحلول

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

BroadcastReceiver.onReceive() {
  Intent intent = new Intent(...);
  intent.setData(...); // set a single String data
  context.startActivity(intent);
}

Activity.onCreate() {
  String value = intent.getData();  // get the String data
  Cursor = ContentProvider.query(search);

  if(cursor.isEmpty() ...){
    finish();
    return;
  }
  ...
  setContentView(...);
}

سيكون لهذا التأثير نفسه بالضبط ، وسيتم تحميل المؤشر إلا مرة واحدة ، وسيتم عرض النشاط فقط إذا كان هناك شيء ما في المؤشر. النفقات العامة الإضافية الوحيدة هي أن القصد يتم إطلاقه مهما كان الأمر ، لكن هذا ليس ضرائب بالضبط :)

لاحظ أنه لن يكون هناك أي وميض أو أي شيء أيضًا ، فإن Android يتعامل مع حالة الاتصال في OnCreate () (أعتقد أن onStart و Onresume أيضًا) حتى لا يعرف المستخدم أبدًا أنه حدث.

نصائح أخرى

ستحتاج إلى العثور على أو صنع مؤشر قابل للتسلسل أو قابل للطرد (ثم استخدام intent.setextra ()). أو ربما يكون من الممكن بدلاً من ذلك قراءة جميع البيانات كطرود ونقلها إلى النشاط؟

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