2011-03-21 8 views
3

내 애플리케이션에는 Activity를 확장하고 contentview를 main으로 설정하는 InternetActivity 클래스가 두 가지 있습니다. 브로드 캐스트 리시버를 확장하는 MyClass.브로드 캐스트 리시버에서 SetContentView() 호출하기

main.xml 파일에는 TextView 2 개와 WIFI 및 GPRS 이미지 2 개가 있습니다. 연결 상태가 변경되면 브로드 캐스팅 수신기가 호출되고 활성화 된 내용과 TextView 및 ImageView의 표시 여부를 설정하려는 내용에 따라 호출됩니다. 그러나 이미지 만 표시하고 변경 사항은 표시하지 않습니다. 여기 은 MyClass.java 파일입니다. 내가 어떻게 해??

public class MyClass extends BroadcastReceiver { 

private static ImageView wifi_image, gprs_image; 
private static TextView wifi_text, gprs_text; 

@Override 
public void onReceive(Context context, Intent intent) { 

    Log.i("IntrntActivity", "Broadcast message receivved"); 

    LinearLayout layout = new LinearLayout(context); 
    LinearLayout.LayoutParams params = new LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

    View view = View.inflate(context, R.layout.main, layout); 

    wifi_image = (ImageView) view.findViewById(R.id.wifi_image); 
    gprs_image = (ImageView) view.findViewById(R.id.gprs_image); 

    wifi_text = (TextView) view.findViewById(R.id.wifi_text); 
    gprs_text = (TextView) view.findViewById(R.id.gprs_text); 

    wifi_image.setVisibility(View.GONE); 
    wifi_text.setVisibility(View.GONE); 
    gprs_image.setVisibility(View.GONE); 
    gprs_text.setVisibility(View.GONE); 

    ConnectivityManager cm = (ConnectivityManager) context 
      .getSystemService(context.CONNECTIVITY_SERVICE); 
    NetworkInfo WIFI = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    NetworkInfo Mobile = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    if (!WIFI.isConnected() && WIFI.isAvailable()) { 
     Toast.makeText(context, "WIFI is available but not connected", 
       Toast.LENGTH_LONG).show(); 
    } 

    if (cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isAvailable()) { 
     wifi_image.setVisibility(View.VISIBLE); 
     wifi_text.setVisibility(View.VISIBLE); 

    } 

    if (Mobile.isConnected()) { 
     gprs_image.setVisibility(View.VISIBLE); 
     gprs_text.setVisibility(View.VISIBLE); 
     Log.i("IntrntActivity", "Mobile isConnected"); 

     // Toast.makeText(context,"GPRS is available", 
     // Toast.LENGTH_LONG).show(); 
    } 

    if (!Mobile.isConnected()) { 
     gprs_image.setVisibility(View.GONE); 
     gprs_text.setVisibility(View.GONE); 
     Log.i("IntrntActivity", "Mobile is Not Connected"); 
     // Toast.makeText(context,"GPRS is available", 
     // Toast.LENGTH_LONG).show(); 
    } 


} 

} 

P.S : 그것은 제대로 Mobile.isConnected()!Mobile.isConnected()에 가서 로그 파일을 보여주는하지만 가시성 내가 제대로보기를 설정하지 않는 changing.Am 그렇지? 이 브로드 캐스트 수신기에서 setContentView (view)를 호출 할 수 있습니까?

답변

11

수신자를 InternetActivity 클래스에 넣고 이미 등록 된 로컬 변수를 사용해야합니다. 별도의 공개 BroadcastReceiver 구현을 만들 필요가 없으며 로컬 구현 만 수행하면됩니다. 이처럼

:

import android.content.BroadcastReceiver; 
import android.content.Context; 

public class InternetActivity extends Activity { 

    private ImageView image; 
    private TextView text; 

    private BroadcastReceiver reciever = new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // do all the checking 
      // interact with image and text 
     }  
    }; 
    @Override 
    public void onCreate(Bundle state) { 
     setContentView(R.layout.....); 
     // fill in image and text variables 
    } 
    @Override 
    public void onStart() { 
     registerReceiver(receiver, /* your intent filter here */); 
    } 
    @Override 
    public void onStop() { 
     unregisterReceiver(receiver); 
    } 
} 
+0

lil 비트 투쟁했지만 마침내 그것을 마쳤다. – Harshad

+0

다른 방법이 있나요 .. Receive에서 Receive를 정의 할 필요가 없도록 활동 ///은 전체 앱의 톱 바 이미지 변경 방법을 의미합니다. –

5

활동 내용보기에 풍선보기를 추가 할 곳이 없습니다.

onCreate 메서드에서 모든 내용을 풍선으로 설정하고 내용보기로 설정해야합니다. 그런 다음 브로드 캐스트 리시버는 선택한보기의 가시성 만 설정해야합니다.

class MyActivity extends Activity { 

    private ImageView wifiIcon; 

    public void onCreate() { 
    setContentView(...); 
    wifiIcon = (ImageView) findViewById(...); 
    } 

    private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // ... 
     wifiIcon.setVisibility(isWifiEnabled ? View.VISIBLE : View.GONE); 
    } 
    }; 
} 
+0

내가 그걸 어떻게 acheive합니까? 어떻게'BroadcastReceiver()'를 확장하고있는'MyClass'에서 setContentView를 호출 할 수 있습니까? – Harshad

+0

수정 된 답변의 샘플 코드를 참조하십시오. –

관련 문제