2014-09-19 2 views
1

하루 종일 큰 문제가 있습니다. 앱을 가지고 있고 기기가 부팅 될 때 바로 실행되지만 유일한 문제는 앱이 부팅되기 전에 인터넷 연결이 필요하며 Wi-Fi가 연결되어 있지 않다는 것입니다. 그래서 BroadcastReceiver와 WifiManager의 Combo를 사용하여 WiFi 연결이 있는지 확인합니다. 내 유일한 질문, 연결 테스트를 통과하면, 그때 나는 MainActivity.java에서 onCreate를 실행하고 싶습니다.인터넷/WiFi 연결시 코드 실행

어떻게하면됩니까? 나는 Java에 매우 익숙하고이 모든 것에 매우 혼란 스럽지만, 좀더 빨리 잡을 수 있습니다.

MainActivity.java이 코드를 가지고 : 여기

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     WebView myWebView = (WebView) findViewById(R.id.webview); 
     myWebView.setWebViewClient(new WebViewClient()); 
     myWebView.getSettings().setJavaScriptEnabled(true); 
     myWebView.loadUrl("http://www.example.com"); 

    } 

그리고는 SMSReceiver.Java 내부 코드 :

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.wifi.WifiManager; 

public class SMSReceiver extends BroadcastReceiver 
{ 


    @Override 
    public void onReceive(Context context, Intent intent) { 
     WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     wifiManager.setWifiEnabled(true); 
     if(wifiManager.isWifiEnabled()){ 
      //Call onCreate in MainActivity.java 
     } 
    } 

} 

을 그리고 여기 매니페스트 코드 :

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".SMSReceiver" 
      android:label="@string/title_activity_smsreceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

내가 도대체 ​​뭘 잘못하고있는 겁니까?

이제
<receiver android:name=".SMSReceiver "> 
      <intent-filter> 
       <action android:name="android.intent.action.YOUR_FILTER_OR_SOME_STANDARD" /> 
      </intent-filter> 
     </receiver> 

내가 무엇을해야합니까 : 수신기와 그리 같은 활동

UPDATE

I 변경 SMSReceiver를?

+0

이것 좀 봐. 그런 다음 의도 동작과 권한을 추가하여 BOOT_COMPLETED 의도를 수신합니다. –

답변

2

그래 내가 이렇게해야 매니페스트 선언에 대한 @alpinescrambler에 동의하고 연결 변화를 관찰 할

<receiver android:name=".SMSReceiver" > 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      </intent-filter> 
     </receiver> 

또한 매니페스트

이 권한을 추가한다 당신이 관찰하려면 0
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

모든 네트워크 변경 사항은 AndroidManifest를이 수신기 대신의 활동으로 SMSReceiver을 선언해야

public class SMSReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i(TAG, SMSReceiver.class.getSimpleName() +"\naction: " + intent.getAction()); 
     if(isOnline(context) == true) { 
      //do your staff 
      context.startActivity(new Intent(context, MainActivity.class)); 
     } 
    } 

    boolean isOnline(Context context) { 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     return false; 
    } 

} 
+0

완벽하게 작동하지만 여전히 처음에는 404 오류가 표시되지만 Wi-Fi에 연결하면 404 오류가 사라져 로딩 화면 추가를 고려합니다. –

0

리시버의 매니페스트 선언이 잘못 되었나요? 또한

<receiver android:name=".SMSReceiver "> 
     <intent-filter> 
       <action android:name="android.intent.action.YOUR_FILTER_OR_SOME_STANDARD" /> 
     </intent-filter> 
</receiver> 

같은 것을해야한다, 당신의 MainActivity를 시작, 같은 :

Intent i = new Intent(context, MainActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i); 
+0

나는 액티비티를 리시버로 바꿨다. 나는 업데이트 된 질문에 대답했다. SMSReciver.java에서 MainActivity에서 onCreate를 호출하기 위해 다음에해야 할 일 –

+0

내 대답을 업데이트했다. – alpinescrambler