لن يتم إطلاق التطبيق من الدرج بعد إزالة الهاتف من Car Dock

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

  •  02-10-2019
  •  | 
  •  

سؤال

أقوم بإنشاء تطبيق بديل للسيارة لأجهزة Android 2.0+. يحتاج التطبيق إلى الإطلاق عند إدراج الهاتف في قفص السيارة ، وكذلك إنهاء عند إزالته من الرصيف. كما يجب أن تكون قادرة على إطلاقها من درج التطبيق.

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

إليك رمز Broadcastreceiver:

public class CarDockBroadcastReceiver extends BroadcastReceiver {
/**
 * @see android.content.BroadcastReceiver#onReceive(Context,Intent)
 */
@Override
public void onReceive(Context context, Intent intent) {
    // TODO Put your code here

    if(intent.getExtras().containsKey("android.intent.extra.DOCK_STATE")){
        int state = intent.getExtras().getInt("android.intent.extra.DOCK_STATE",1);
        if(state == 0){
            Log.i("Dock", "Removed from dock!");    
            ((Activity)context).finish();
        }
    }
}

}

نشاطي الرئيسي هو على النحو التالي:

public class MainActivity extends Activity {
/** Called when the activity is first created. */
CarDockBroadcastReceiver receiver;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    IntentFilter filter = new IntentFilter("android.intent.action.DOCK_EVENT");
    receiver = new CarDockBroadcastReceiver();
    registerReceiver(receiver, filter);
}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    unregisterReceiver(receiver);
    super.onDestroy();
}

}

يحتوي النشاط الرئيسي على مرشح نية لـ Action.main و Catevory.Launcher و Catevory.Default و Catevory.Car_Dock. أي أفكار بشأن لماذا يحدث هذا؟

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

المحلول

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

راجع للشغل ، أوصي باستخدام Intent.ACTION_DOCK_EVENT عوضا عن "android.intent.action.DOCK_EVENT" في الخاص بك IntentFilter. وبهذه الطريقة ، إذا كان لسبب أبله يغيرون السلسلة الفعلية ، فإن الكود الخاص بك لا يحتاج إلى تغيير.

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