2012-07-17 16 views
20

Tôi đang gửi đăng xuất tới máy chủ của mình khi người dùng tắt nguồn trên thiết bị.Thứ tự của các sự kiện trong 2.3 và 4.0.3 như sau. Vì vậy, bây giờ Đăng xuất là Không thành công.
Device: Samsung Galaxy s2Android: Tắt Radio mạng trước ACTION_SHUTDOWN sự kiện.Đặt hàng Đã thay đổi trong ICS


Android: 2,3


1) Nhận ACTION_SHUTDOWN
2) Gửi Thoát kiện, giấc ngủ trong vòng 5 giây, LOG OUT gửi thành công
3) Dữ liệu Sự kiện tắt Radio mạng.
4) Tắt nguồn thiết bị.


Android: 4.0.3


1) Dữ liệu mạng Đài phát thanh ra sự kiện.
2) Nhận ACTION_SHUTDOWN
3) Gửi sự kiện đăng xuất, ĐĂNG NHẬP FAIL Khi Mạng bị ngắt.
Bất kỳ cách nào để nhận ACTION_SHUTDOWN trước khi tắt Mạng dữ liệu?

Trả lời

0

Bạn đã thử sử dụng Dịch vụ cho điều đó chưa? Bạn có thể đăng ký một dịch vụ luôn chạy để khi nó nhận được onDestroy() bạn biết ứng dụng của bạn đang bị giết và thực hiện yêu cầu đăng xuất đó.

Chỉ là một ý tưởng. Tôi không biết liệu onDestroy() của dịch vụ có được gọi sớm hơn mạng bị hỏng hay không, nhưng tôi sẽ thử chỉ trong trường hợp.

0

Tạo một dịch vụ mà nhận được phát sóng cho tắt máy như thế này:

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 ++");   
    } 
} 

Trong AndroidManifest.xml của bạn, nhúng đoạn dưới đây trong <application> tags:

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

Từ hoạt động của ứng dụng của bạn đăng ký một bộ thu phát sóng có bộ lọc thích hợp cho các mục đích:

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

Oklets giả sử tôi gọi LogOff(). Khi nền tảng Radio mạng tắt, tôi không thể gửi dữ liệu !!! – NitZRobotKoder

+0

Vâng! Tôi đã phần nào nhận ra sau khi đọc lại câu hỏi của bạn một lần nữa ... ngạc nhiên, không thể tin rằng android đã thay đổi nó, có thể nghĩ radio là thứ cuối cùng bị đóng cửa - xin lỗi vì bài đăng rambling vì nó không phải là thứ bạn đang tìm kiếm cho ... – t0mm13b

+0

thats Ok !! Yeah lạ lý do tại sao các hành vi đã được thay đổi !! – NitZRobotKoder

1

Nó không giống như hành vi của vanilla Android. Có thể nhà sản xuất thiết bị của bạn đã thực hiện một số cải tiến nội bộ cho quá trình tắt máy để tăng tốc.

Bạn có thể xem cách tắt máy được xử lý tại frameworks/base/services/java/com/android/server/pm/ShutdownThread.java#L296 trên nhánh chính hiện tại.

Tuy nhiên, với tư cách là nhà phát triển ứng dụng dành cho thiết bị di động, bạn không nên dựa vào kết nối mạng không đổi.

Các vấn đề liên quan