Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android完成非活动类中的活动_Android_Android Activity_Android Context - Fatal编程技术网

Android完成非活动类中的活动

Android完成非活动类中的活动,android,android-activity,android-context,Android,Android Activity,Android Context,在我的应用程序中,我正在检查是否存在网络连接;如果没有,则启动一个活动,并在连接恢复时完成该活动。我正在使用广播接收器确定网络连接,但当需要完成该活动时,应用程序正在崩溃,这给了我一个受限上下文错误 以下是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:

在我的应用程序中,我正在检查是否存在网络连接;如果没有,则启动一个活动,并在连接恢复时完成该活动。我正在使用广播接收器确定网络连接,但当需要完成该活动时,应用程序正在崩溃,这给了我一个
受限上下文错误

以下是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);
        }
    }
}
公共类ConnectionChangeReceiver扩展了BroadcastReceiver{
@凌驾
公共void onReceive(上下文、意图){
ActivityManager ActivityManager=(ActivityManager)context.getSystemService(context.ACTIVITY_服务);
List activitys=activityManager.getRunningTasks(Integer.MAX_值);
布尔值isActivityFound=false;
对于(inti=0;i
您不能这样做“((NotationActivity)context)”。“上下文”是接收者的上下文,而不是您的NotationActivity的上下文。所以你不能这样施展才能获得活力


有几种方法可以满足您的需要。谷歌“从广播接收器完成活动”。有很多有用的信息可以帮助您找到最适合您的案例的方法。

问题在于这一行

 ((NotationActivity)context).finish();
将接收方作为活动的内部类,这样它就可以访问finish()方法,或者找到从接收方到活动的另一种通信方式