2017-01-27 26 views
0

У меня есть один класс Activity, который должен выполнять определенные функции в соответствии с изменениями, которые он чувствует в классе ConnectivityReceiver, который расширяет BroadcastReceiver для изменений в Подключение к ИнтернетуКогда класс реализует интерфейс прослушивателя для прослушивания изменений, записанных в классе, расширяющем BroadcastReceiver, ничего не происходит

Ниже приведены два класса, как реализовать интерфейс в классе ConnectivityReceiver

Но требуемая функция не работает так, как это желательно. Infact, ничего не происходит. Просьба предложить способы сделать это.

  • MyActivity

    public class MyActivity extends AppCompatActivity implements ConnectivityReceiver.ConnectivityReceiverListener { 
    
        private EditText editText; 
        private static MyActivity mInstance; 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_my); 
         editText=(EditText) findViewById(R.id.editText1); 
         mInstance = this; 
        } 
    
        public static synchronized MyActivity getInstance() { 
         return mInstance; 
        } 
    
        public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) { 
         ConnectivityReceiver.connectivityReceiverListener = listener; 
        } 
    
        @Override 
        protected void onResume() { 
         super.onResume(); 
         // register connection status listener 
         MyActivity.getInstance().setConnectivityListener(this); 
        } 
    
        @Override 
        public void onNetworkConnectionChanged(boolean isConnected) { 
         if(isConnected){ 
          editText.setText("Connected"); 
          // TODO: Many Other Stuff 
         } else { 
          editText.setText("Not Connected"); 
          // TODO: Many Other Stuff 
         } 
        }  
        } 
    
  • ConnectivityReceiver

    public class ConnectivityReceiver extends BroadcastReceiver { 
    
        public static ConnectivityReceiverListener connectivityReceiverListener; 
    
        public ConnectivityReceiver() { 
         super(); 
        } 
    
        @Override 
        public void onReceive(Context context, Intent intent) { 
         ConnectivityManager cm = (ConnectivityManager) context 
          .getSystemService(Context.CONNECTIVITY_SERVICE); 
         NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
         boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting(); 
    
         if (connectivityReceiverListener != null) {      
           connectivityReceiverListener.onNetworkConnectionChanged(isConnected); 
         } 
        } 
    
        public static boolean isConnected(Context context) { 
         ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
         NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
         return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting(); 
        } 
    
        public interface ConnectivityReceiverListener { 
         void onNetworkConnectionChanged(boolean isConnected); 
        } 
    } 
    
  • AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="idiot.houses.contactsimport" > 
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
        <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
        <uses-permission android:name="android.permission.INTERNET" /> 
        <application 
         android:allowBackup="true" 
         android:icon="@drawable/ic_launcher1" 
         android:label="@string/app_name" 
         android:supportsRtl="true" 
         android:theme="@style/AppTheme" > 
         <activity 
          android:name=".MyActivity" 
          android:label="@string/title_activity_main" > 
          <intent-filter> 
           <action android:name="android.intent.action.MAIN" /> 
           <category android:name="android.intent.category.LAUNCHER" /> 
          </intent-filter> 
         </activity>  
         <receiver 
          android:name=".ConnectivityReceiver" 
          android:enabled="true"> 
          <intent-filter> 
           <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
          </intent-filter> 
         </receiver>  
        </application>  
    </manifest> 
    

ответ

1

Ваша деятельность должна регистрировать приемник вещания.

В вашем onStart(), например, просто сделайте следующее:

public void onStart() { 
    ConnectivityReceiver receiver = new ConnectivityReceiver(); 
    IntentFilter filter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); 
    registerReceiver(receiver, filter); 
} 

Переменный фильтр должен быть таким же, как заявлено в манифесте.

Кроме того, вы должны отменить свой приемник, когда активность больше не используется:

public void onStop() { 
     unregisterReceiver(myReceiver); 
} 
1

Наконец, после просмотра через Интернет, у меня был выход и благодаря Винсент Aunai за помощь

  • MyApplication.java

    public class MyApplication extends Application { 
    
        public static int counterValue=0; 
    
        private static MyApplication mInstance; 
    
        @Override 
        public void onCreate() { 
         super.onCreate(); 
    
         mInstance = this; 
        } 
    
        public static synchronized MyApplication getInstance() { 
         return mInstance; 
        } 
    
        public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) { 
         ConnectivityReceiver.connectivityReceiverListener = listener; 
        } 
    } 
    
  • MyActivity.java

    public class MyActivity extends AppCompatActivity implements ConnectivityReceiver.ConnectivityReceiverListener { 
        private ConnectivityReceiver receiver; 
        private EditText editText; 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_my); 
         editText=(EditText) findViewById(R.id.editText1); 
         receiver=new ConnectivityReceiver(); 
         IntentFilter filter=new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); 
         registerReceiver(receiver, filter); 
        } 
        @Override 
        protected void onDestroy(){ 
         unregisterReceiver(receiver); 
        } 
    
    
        @Override 
        protected void onResume() { 
         super.onResume(); 
         // register connection status listener 
         MyApplication.getInstance().setConnectivityListener(this); 
        } 
    
        @Override 
        public void onNetworkConnectionChanged(boolean isConnected) { 
         if(isConnected){ 
          editText.setText("Connected"); 
          // TODO: Many Other Stuff 
         } else { 
          editText.setText("Not Connected"); 
          // TODO: Many Other Stuff 
         } 
        }  
    } 
    
  • ConnectivityReceiver.java

    public class ConnectivityReceiver extends BroadcastReceiver { 
    
        public static ConnectivityReceiverListener connectivityReceiverListener; 
    
        public ConnectivityReceiver() { 
         super(); 
        } 
    
        @Override 
        public void onReceive(Context context, Intent intent) {   
         boolean isConnected = ConnectivityReceiver.isConnected(); 
         if (connectivityReceiverListener != null) {      
           connectivityReceiverListener.onNetworkConnectionChanged(isConnected); 
         } 
        } 
    
        public static boolean isConnected(Context context) { 
         ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
         NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
         return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting(); 
        } 
    
        public interface ConnectivityReceiverListener { 
         void onNetworkConnectionChanged(boolean isConnected); 
        } 
    } 
    
  • AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="idiot.houses.contactsimport" > 
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
        <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
        <uses-permission android:name="android.permission.INTERNET" /> 
        <application 
         android:name=".MyApplication" 
         android:allowBackup="true" 
         android:icon="@drawable/ic_launcher1" 
         android:label="@string/app_name" 
         android:supportsRtl="true" 
         android:theme="@style/AppTheme" > 
         <activity 
          android:name=".MyActivity" 
          android:label="@string/title_activity_main" > 
          <intent-filter> 
           <action android:name="android.intent.action.MAIN" /> 
           <category android:name="android.intent.category.LAUNCHER" /> 
          </intent-filter> 
         </activity>  
         <receiver 
          android:name=".ConnectivityReceiver" 
          android:enabled="true"> 
          <intent-filter> 
           <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
          </intent-filter> 
         </receiver>  
        </application>  
    </manifest>