2012-07-17 7 views
20

में बदल गया जब मैं डिवाइस पर बिजली बंद कर देता था तो मैं अपने सर्वर पर लॉगआउट भेज रहा था। 2.3 और 4.0.3 में ईवेंट का क्रम निम्नानुसार है। तो अब लॉग आउट विफल है।
डिवाइस: सैमसंग गैलेक्सी s2एंड्रॉइड: ACTION_SHUTDOWN ईवेंट से पहले नेटवर्क रेडियो बंद करें। ऑर्डर क्रम आईसीएस


एंड्रॉयड: 2,3


1) प्राप्त ACTION_SHUTDOWN
2) 5 सेकंड के लिए लॉगआउट घटना, नींद भेजें, लॉग आउट सफलतापूर्वक भेजा
3) डाटा घटना से नेटवर्क रेडियो।
4) डिवाइस पावर ऑफ।


एंड्रॉयड: 4.0.3


1) डाटा नेटवर्क रेडियो बंद घटना।
2) ACTION_SHUTDOWN
प्राप्त करें 3) लॉगआउट ईवेंट भेजें, विफल हो जाएं क्योंकि नेटवर्क नीचे है।
डेटा नेटवर्क रेडियो से पहले ACTION_SHUTDOWN प्राप्त करने के लिए किसी भी तरह से?

उत्तर

0

क्या आपने इसके लिए सेवा का उपयोग करने का प्रयास किया है? आप एक सतत चल रही सेवा पंजीकृत कर सकते हैं ताकि जब इसे डेस्ट्रॉय() पर प्राप्त हो जाए तो आपको पता चलेगा कि आपका ऐप मारे जा रहा है और वह लॉगआउट अनुरोध करता है।

बस एक विचार। मुझे नहीं पता कि सेवा के ऑनस्ट्रोय() को नेटवर्क से पहले बुलाया जाता है या नहीं, लेकिन मैं इसे सिर्फ मामले में आज़मा दूंगा।

0

एक सेवा है कि इस तरह से बंद के लिए प्रसारण प्राप्त बनाएँ:

public class MyAppShutdown extends BroadcastReceiver{ 
    private static final String TAG = "MyAppShutdown"; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Log.v(TAG, "onReceive - ++ ENTER ++"); 
     if (intent != null && intent.getAction().equals(Intent.ACTION_SHUTDOWN)){ 
      Log.v(TAG, "onReceive - ***] SHUTDOWN [***"); 
      // perhaps send a broadcast to your app via intent to perform a log out. 
      Intent intent = new Intent(); 
      intent.addAction("intent.myapp.action.shutdown"); 
      sendBroadcast(intent); 
     } 
     Log.v(TAG, "onReceive - ++ LEAVE ++");   
    } 
} 

अपने AndroidManifest.xml में, नीचे इस टुकड़ा एम्बेड <application> टैग के भीतर:

<receiver android:name=".MyAppShutdown"> 
    <intent-filter> 
     <action android:name="android.intent.action.SHUTDOWN"/> 
    </intent-filter> 
</receiver> 

यदि आपके ऐप की गतिविधि से एक रजिस्टर इरादे के लिए उपयुक्त फ़िल्टर के साथ प्रसारण रिसीवर:

public class myApp extends Activity{ 
    private myAppBroadcastRcvr myAppRcvr = new myAppBroadcastRcvr(); 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction("intent.myapp.action.shutdown"); 
     registerReceiver(myAppRcvr, filter); 
    } 
    // Perhaps you have this 
    private void LogOff(){ 
    } 
    class myAppBroadcastRcvr extends BroadcastReceiver{ 
     @Override 
     public void onReceive(Context context, Intent intent){ 
      if (intent.getAction().equals("intent.myapp.action.shutdown")){ 
       LogOff(); 
      } 
     } 
    } 
} 
+0

ओकेलेट मानते हैं कि मैं लॉगऑफ() को कॉल करता हूं। प्लेटफ़ॉर्म नेटवर्क रेडियो बंद है, इसलिए मैं डेटा भेजने में सक्षम नहीं हूं !!! – NitZRobotKoder

+0

हाँ! मैंने फिर से आपके प्रश्न को फिर से पढ़ने के बाद कुछ हद तक महसूस किया ... आश्चर्यचकित हूं, विश्वास नहीं कर सकता है कि एंड्रॉइड ने इसे बदल दिया है, सोचा होगा कि रेडियो बंद होने वाली आखिरी चीज है - जुआ पोस्ट के लिए खेद है क्योंकि आप जो देख रहे हैं के लिए ... – t0mm13b

+0

ठीक है !! हाँ अजीब क्यों व्यवहार बदल गया !! – NitZRobotKoder

1

यह वेनिला एंड्रॉइड व्यवहार की तरह दिखता नहीं है। हो सकता है कि आपके डिवाइस के निर्माता ने इसे गति देने के लिए शटडाउन प्रक्रिया में कुछ आंतरिक सुधार किए हों।

आप देख सकते हैं कि वर्तमान मास्टर शाखा पर frameworks/base/services/java/com/android/server/pm/ShutdownThread.java#L296 पर शटडाउन कैसे संभाला जाता है।

हालांकि मोबाइल एप्लिकेशन डेवलपर के रूप में आपको निरंतर नेटवर्क कनेक्शन पर भरोसा नहीं करना चाहिए।

संबंधित मुद्दे