2012-09-26 4 views
5

tôi có thể tiếp cận vấn đề theo một cách sai ..onActivityResult luôn trả về 0 (RESULT_CANCELED) khi gọi thiết lập

Những gì tôi đang làm là hiển thị một thông điệp cảnh báo khi không có kết nối internet và "ok" nút dẫn người dùng đến cài đặt wifi để bật internet. Những gì tôi muốn các ứng dụng để làm, khi người dùng quay trở lại nó sau khi thay đổi (hoặc không) các thiết lập internet là để tải lại các ứng dụng hoặc hoạt động mà nó được.

Đối với điều này tôi đang làm cuộc gọi sau đây cho nút "ok":

static void startAct(Activity ctxt) 
{ 
    ctxt.startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), WIFI_SETTINGS); 

} 

trên lớp của hoạt động, nơi mà thông điệp này được thể hiện tôi có như sau:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == WIFI_SETTINGS && resultCode == RESULT_OK) 
    { 
     this.finish(); 

     Intent myIntent = new Intent(this, MyActivity.class); 
     startActivity(myIntent); 
    } 
} 

nhưng resultCode luôn là 0, onActivityResult được gọi ngay sau khi nhấn nút "ok".

Tôi có nên tiếp cận vấn đề này một cách khác nhau không? Làm cách nào để tải lại/làm mới ứng dụng của tôi khi người dùng quay lại từ cài đặt wifi?

Tôi đã kiểm tra các câu trả lời tương tự nhưng dường như họ sử dụng một hoạt động trong cùng một ứng dụng, để họ có thể gọi set_result(...), nhưng tôi không thể làm điều đó tại đây.

cảm ơn!

+0

Tại sao không chỉ kiểm tra 'onActivityResult', nếu wifi hiện đang bật. Bất kể giá trị nó trả về là bao nhiêu. – Doomsknight

+0

Tôi có thể làm điều đó, nhưng onActivityResult được gọi ngay lập tức sau khi tôi nhấn nút "ok", vì vậy người dùng sẽ không có thời gian để thay đổi cài đặt trước khi nó được gọi. – marimaf

+0

Nút ok nào? Tôi nghĩ bạn có nghĩa là ok trên màn hình cài đặt Wifi. Mã requestCode có trả về giống như WIFI_SETTINGS không? – Doomsknight

Trả lời

2

Như những người khác đã nói bạn không nên gọi kết thúc - cũng gọi startActivityForResult không phải là hữu ích. Ngay cả khi resultCode khác với 0, phải mất vài giây để kết nối với WiFi thường.

Vì vậy, để trả lời câu hỏi của bạn, bạn nên sử dụng BroadcastReceiver và lắng nghe ý định thay đổi mạng.

Mã này hơi cũ, nhưng dưới đây là một cái gì đó tương tự như tôi làm trong một trong các ứng dụng của tôi. Nó hy vọng sẽ giúp bạn bắt đầu.

protected void registerWifiReceivers() 
{ 
    IntentFilter f1 = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION); 
    IntentFilter f2 = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION; 
    this.registerReceiver(mReceiver, f1); 
    this.registerReceiver(mReceiver, f2);  
} 



final BroadcastReceiver mReceiver = new BroadcastReceiver() 
{  
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     String action = intent.getAction();   
     Log.d (TAG, "BroadcastReceiver: " + action); 

     if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) 
     { 
     Log.i (TAG, "handling event: WifiManager.NETWORK_STATE_CHANGED_ACTION action: "+action); 
     handleWifiStateChange(intent); 
     } 
     else if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) 
     { 
     Log.i (TAG, "ignoring event: WifiManager.WIFI_STATE_CHANGED_ACTION action: "+action); 
     } 
    } 
} 

protected void handleWifiStateChange (Intent intent) 
{ 
    NetworkInfo info = (NetworkInfo)intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);  
    if (info.getState().equals(NetworkInfo.State.CONNECTED)) 
    { 
     //do something... 
    } 

} 
+0

Cảm ơn! Điều này đã giúp :) – marimaf

0

Không tạo ý định mới. Chỉ cần làm điều này -

finish(); 
startActivity(getIntent()); 
+0

Điều này không giải quyết được sự cố, vì onActivityResult được gọi ngay lập tức và resultCode vẫn giống nhau: 0 – marimaf

+1

trong trường hợp của bạn, startactivityforresults có thể không hữu ích lắm .Thay vào đó, bạn chỉ cần kiểm tra lại nếu wifi hiện đang hoạt động và làm mới hoạt động tương ứng. –

1

Plesae không sử dụng

  this.finish(); 

này sẽ đóng cửa hoạt động của bạn hoàn toàn. Khi bạn sử dụng phương thức startActivityForResult(), bạn nên sử dụng this.finish sau phương thức onActivityResult().

+0

ok, nhưng điều đó không giải quyết được vấn đề của tôi – marimaf