사용하는 앱은 ActivityGroup으로 구성되어있습니다.
네트워크의 변화를 체크해서
네트워크 연결이 끊어지면 다이얼로그를 띄우는 걸 하려고 합니다.
그래서
BroadcastReceiver를 상속받은 클래스를 receiver에 등록시켜서 확인 중입니다.
근데 문제점은 Dialog가 뜨지않고 강제종료가 되어버립니다.
-소스-
public class ConnReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobile = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifi = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile4g = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIMAX);
boolean lte_4g = false;
if (mobile4g != null) {
lte_4g = mobile4g.isConnected();
}
if (wifi.isConnected() || mobile.isConnected() || lte_4g) {
// Do Something
} else {
System.out.println("끊김");
AlertDialog alert = new AlertDialog.Builder(context)
.setTitle("안내").setMessage("끊김")
.setPositiveButton("확인", null).show();
}
}
}
}
-Manifest-
<receiver android:name=".ConnReceiver"
android:enabled="true"
android:priority="0">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
-LogCat-
05-17 18:59:40.605: E/AndroidRuntime(31492): FATAL EXCEPTION: main
05-17 18:59:40.605: E/AndroidRuntime(31492): java.lang.RuntimeException: Unable to start receiver com.wiz.bellringallandroid.ConnReceiver: java.lang.ClassCastException: android.app.ReceiverRestrictedContext
05-17 18:59:40.605: E/AndroidRuntime(31492): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1809)
05-17 18:59:40.605: E/AndroidRuntime(31492): at android.app.ActivityThread.access$2400(ActivityThread.java:117)
05-17 18:59:40.605: E/AndroidRuntime(31492): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:985)
05-17 18:59:40.605: E/AndroidRuntime(31492): at android.os.Handler.dispatchMessage(Handler.java:99)
05-17 18:59:40.605: E/AndroidRuntime(31492): at android.os.Looper.loop(Looper.java:130)
05-17 18:59:40.605: E/AndroidRuntime(31492): at android.app.ActivityThread.main(ActivityThread.java:3691)
05-17 18:59:40.605: E/AndroidRuntime(31492): at java.lang.reflect.Method.invokeNative(Native Method)
05-17 18:59:40.605: E/AndroidRuntime(31492): at java.lang.reflect.Method.invoke(Method.java:507)
05-17 18:59:40.605: E/AndroidRuntime(31492): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
05-17 18:59:40.605: E/AndroidRuntime(31492): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
05-17 18:59:40.605: E/AndroidRuntime(31492): at dalvik.system.NativeStart.main(Native Method)
05-17 18:59:40.605: E/AndroidRuntime(31492): Caused by: java.lang.ClassCastException: android.app.ReceiverRestrictedContext
05-17 18:59:40.605: E/AndroidRuntime(31492): at com.wiz.bellringallandroid.ConnReceiver.onReceive(ConnReceiver.java:25)
05-17 18:59:40.605: E/AndroidRuntime(31492): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1798)
05-17 18:59:40.605: E/AndroidRuntime(31492): ... 10 more
이유가 뭘까요
보통 context를 넘기면 되던데
예제에도 그렇게 되어있고...ㅠㅠ
ActivityGroup에선 dialog를 띄울 때 context값에 getParent()를 넣거든요
근데 위의 클래스에선 getParent()도 안써지구요
ㅠ이유가 뭘까요
ActivityGroup을 안쓴 액티비티 창에서 네트워크변화체크해서 다이얼로그를 띄워도 같은 에러를 보여주네요 ㅠㅠ
댓글 감사합니다..그렇게해서 구현했는데요 이래와 같은 식으로요...
Bundle bun = new Bundle();
bun.putString("notiMessage",
"네트워크의 연결이 중단되었습니다. 네트워크 상태를 확인하시고 다시 실행해주세요.");
Intent popupIntent = new Intent(context,
AlertDialogActivity.class);
popupIntent.putExtras(bun);
PendingIntent pie = PendingIntent.getActivity(context, 0,
popupIntent, PendingIntent.FLAG_ONE_SHOT);
try {
pie.send();
} catch (CanceledException e) {
e.printStackTrace();
}
문제가 저 위에 들어가는 context 자리에 getParent()를 못쓰나요???? activity가 두개 겹쳐있으면 저 dialog가 두개가 뜨더라고요 ㅠㅠ
그리고 만약에 다이얼로그 화면에 확인버트을 눌러서 System.exit(0); 하면 앱이 꺼지고 다시실행이되는 현상이 생기더라고요
ㅠㅠㅠ
BR에서는 다이얼로그가 안띄워지는걸로 아는데말이죠...전 Activity를 다이얼로그형태로 만들어서 pendingIntent로 해결하는데말이죠.