2015-11-08 142 views
3

我想從我的廣播接收器中的onReceive方法調用SCS類中的幾個方法,但它給了我無處不在的錯誤「無法對非靜態方法進行靜態引用」靜態方法CheckConnection()從類型SCS」從非靜態的上下文調用靜態方法

SCSReceiver.class

public class SCSReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    SCS.mehtodName(context); 
    // ... do what you need to do here... 
} 

SCS.class

public class SCS extends Activity { 
private Handler handler; 
private Runnable runnable; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_connection_stablizer); 
} 
public static void mehtodName(Context context) { 
    // TODO Auto-generated method stub 
    CheckConnection(); 
} 

private void CheckConnection() { 
    ConnectivityManager cn = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo nf = cn.getActiveNetworkInfo(); 
    if (nf != null && nf.isConnected() == true) { 
     //CheckAccess(); 
     Toast.makeText(this, 
       "Network Available! now checking Inernet access..", 
       Toast.LENGTH_SHORT).show(); 
    } else { 
     // Toast.makeText(this, "Network Not Available", Toast.LENGTH_SHORT) 
     // .show(); 
    } 
} 

的manifest.xml

<activity 
     android:name="com.xyz.netspeedmaster.SCS" 
     android:label="@string/title_activity_connection_stablizer" > 
    </activity> 

    <receiver android:name="com.xyz.abc.SCSReceiver" > 
    </receiver> 
+0

再次看看錯誤消息。這不是它在你的頭銜中所說的。 – EJP

回答

1

充分利用SCSReceiver類的內部類的SCS類:

public class SCS extends Activity { 
private Handler handler; 
private Runnable runnable; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_connection_stablizer); 
} 
public static void methodName(Context context) { 
    // TODO Auto-generated method stub 
    CheckConnection(); 
} 

private void CheckConnection() { 
    ConnectivityManager cn = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo nf = cn.getActiveNetworkInfo(); 
    if (nf != null && nf.isConnected() == true) { 
     CheckAccess(); 
     Toast.makeText(this, 
       "Network Available! now checking Inernet access..", 
       Toast.LENGTH_SHORT).show(); 
    } else { 
     // Toast.makeText(this, "Network Not Available", Toast.LENGTH_SHORT) 
     // .show(); 
    } 
} 

class SCSReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    methodName(context); 
    // ... do what you need to do here... 
} 

} 

無需SCS.methodName,只需直接調用該方法。

+0

您是否嘗試過我的解決方案? –

+0

啊,你應該刪除它。我會更新答案。 –

+0

解決方案是否適合您? –

1

如果您不想調用基於System Receivers的BroadcastReceiver,那麼您可以嘗試使用Dynamic BroadcastReceiver,通過它可以調用Activity的方法。

public class SCS extends Activity { 
private Handler handler; 
private Runnable runnable; 
private IntentFilter filter; 
private BroadcastReceiver receiver; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_connection_stablizer); 

    filter=new IntentFilter("com.your_package.ANY_TEXT_STRING"); 
    receiver=new BroadcastReceiver(){ 

     @Override 
     public void onReceive(Context context, Intent intent) { 
       mehtodName(context); //Invoke your methods from here 
        } 
      }; 
     registerReceiver(filter,receiver); 

     //Place the below two lines where you want to trigger BroadcastReceiver 
     Intent intent=new Intent("com.your_package.ANY_TEXT_STRING"); 
     sendBroadcast(intent); 

} 
public static void mehtodName(Context context) { 
    // TODO Auto-generated method stub 
    CheckConnection(); 
} 

private void CheckConnection() { 
    ConnectivityManager cn = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo nf = cn.getActiveNetworkInfo(); 
    if (nf != null && nf.isConnected() == true) { 
     //CheckAccess(); 
     Toast.makeText(this, 
       "Network Available! now checking Inernet access..", 
       Toast.LENGTH_SHORT).show(); 
    } else { 
     // Toast.makeText(this, "Network Not Available", Toast.LENGTH_SHORT) 
     // .show(); 
    } 
} 
相關問題