在我的應用程序中,我檢查是否有網絡連接;如果它沒有,請啓動一項活動,並在連接回來時完成該活動。我正在使用廣播接收器來確定網絡連接,但是當它需要完成該活動並給我一個RestrictedContext error
時,應用程序崩潰。從非活動類的Android完成活動
這裏是logcat的輸出:
01-05 14:22:21.543: E/AndroidRuntime(7064): FATAL EXCEPTION: main
01-05 14:22:21.543: E/AndroidRuntime(7064): java.lang.RuntimeException: Unable to start receiver net.evolution.betting.application.ConnectionChangeReceiver: java.lang.ClassCastException: android.app.ReceiverRestrictedContext
01-05 14:22:21.543: E/AndroidRuntime(7064): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2821)
01-05 14:22:21.543: E/AndroidRuntime(7064): at android.app.ActivityThread.access$3200(ActivityThread.java:125)
01-05 14:22:21.543: E/AndroidRuntime(7064): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)
01-05 14:22:21.543: E/AndroidRuntime(7064): at android.os.Handler.dispatchMessage(Handler.java:99)
01-05 14:22:21.543: E/AndroidRuntime(7064): at android.os.Looper.loop(Looper.java:123)
01-05 14:22:21.543: E/AndroidRuntime(7064): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-05 14:22:21.543: E/AndroidRuntime(7064): at java.lang.reflect.Method.invokeNative(Native Method)
01-05 14:22:21.543: E/AndroidRuntime(7064): at java.lang.reflect.Method.invoke(Method.java:521)
01-05 14:22:21.543: E/AndroidRuntime(7064): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-05 14:22:21.543: E/AndroidRuntime(7064): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-05 14:22:21.543: E/AndroidRuntime(7064): at dalvik.system.NativeStart.main(Native Method)
01-05 14:22:21.543: E/AndroidRuntime(7064): Caused by: java.lang.ClassCastException: android.app.ReceiverRestrictedContext
01-05 14:22:21.543: E/AndroidRuntime(7064): at net.evolution.betting.application.ConnectionChangeReceiver.onReceive(ConnectionChangeReceiver.java:37)
01-05 14:22:21.543: E/AndroidRuntime(7064): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2810)
01-05 14:22:21.543: E/AndroidRuntime(7064): ... 10 more
這裏是類來源:
public class ConnectionChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> activitys = activityManager.getRunningTasks(Integer.MAX_VALUE);
boolean isActivityFound = false;
for (int i = 0; i < activitys.size(); i++) {
if (activitys.get(i).topActivity.toString().equalsIgnoreCase("ComponentInfo{net.evolution.betting.application/net.evolution.betting.application.NotationActivity}")) {
isActivityFound = true;
}
}
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo( ConnectivityManager.TYPE_MOBILE);
if (activeNetInfo != null && isActivityFound == true) {
((NotationActivity)context).finish();
}else if(activeNetInfo == null){
Intent i = new Intent("net.evolution.betting.application.NOTATIONACTIVITY");
i.putExtra("DialogTitle", "Warining!");
i.putExtra("DialogBody", "It seems like your app is not connected to Internet witch is required.Please check your network connection.");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}