methods - Android में BroadcastReceiver से एक गतिविधि विधि को कॉल करना



android-activity static-methods (4)

इस कोड को आजमाएं

इंटरनेट खोने वाले वर्ग के लिए आपका ब्रॉडकास्टसीवर क्लास:

public class InternetLostReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
    context.sendBroadcast(new Intent("INTERNET_LOST"));
}
}

अपनी गतिविधि में प्रसारण कॉल करने के लिए इसे जोड़ें:

public class TestActivity  extends Activity{

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

    registerReceiver(broadcastReceiver, new IntentFilter("INTERNET_LOST"));
}

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // internet lost alert dialog method call from here...
    }
};

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(broadcastReceiver);
}
}

यहां मैं एक ऑनलाइन एप्लिकेशन बना रहा हूं जो केवल इंटरनेट पर निर्भर करता है।

इसलिए जब भी कोई नेटवर्क त्रुटि होती है तो उसे उपयोगकर्ता को सूचित करना होगा। इसके लिए, मैंने ब्रॉडकास्ट रिसीवर बनाया है जो नेटवर्क कनेक्शन खो जाने पर कॉल प्राप्त करता है (इंटरनेट)।

यह सब पूरी तरह से काम करता है। अब मुझे क्या चाहिए कि मुझे इस ब्रॉडकास्ट रिसीवर से गतिविधि की एक विधि को कॉल करना है, जहां मैंने एक अलर्ट वार्तालाप बनाया है।

मैंने stack-overflow.com पर कई उत्तरों को पढ़ा है कि मैं केवल उस विधि का उपयोग करके उस विधि को स्थिर और कॉल कर सकता हूं,

उदाहरण के लिए MyActivityName.myMethod()

लेकिन मैं अपनी विधि स्थैतिक घोषित नहीं कर सकता, क्योंकि मैं वहां चेतावनी संवाद का उपयोग कर रहा हूं और यह मुझे लाइन पर त्रुटि दिखाता है,

AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);

यह एक स्थिर संदर्भ में इसका उपयोग नहीं कर सकता है

तो, मैं ब्रॉडकास्ट रिसीवर से गतिविधि की विधि (स्थिर और उस गतिविधि को शुरू किए बिना) कैसे कॉल कर सकता हूं?

और क्या मुझे ब्रॉडकास्ट रिसीवर से गतिविधि (या खंड) नाम मिल सकता है जो वर्तमान में चल रहा है?


आप में गतिविधि में एक बूलियन वैरिएबल जोड़ें जहां से आप खुले अलर्टडियलॉग हैं

boolean isDialogOpened = false;

// in broadcast recever check 
if(isDialogOpened) {
    alertDialog();
}

और इस कोड के साथ अलर्टडियलॉग के लिए अपने कोड को प्रतिस्थापित करें

public void alertDialog() {
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);

    alertDialog.setMessage("Network not found.");
    alertDialog.setPositiveButton("Check Setting",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                }
            });
    alertDialog.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                }
            });

    alertDialog.setOnDismissListener(new OnDismissListener() {
        @Override
        public void onDismiss(DialogInterface dialog) {
            isDialogOpened = false;
        }
    });

    alertDialog.setOnCancelListener(new OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            isDialogOpened = false;
        }
    });

    alertDialog.show();
}

अपने गतिविधि के संदर्भ को BroadcastReceiver के नियंत्रक को पास करें।

public class ResponseReceiver extends BroadcastReceiver{

    MainActivity ma; //a reference to activity's context

    public ResponseReceiver(MainActivity maContext){
        ma=maContext;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        ma.brCallback("your string"); //calling activity method
    }

}

और आपके मुख्य गतिविधि में

public class MainActivity extends AppCompatActivity {
    ...
    public void onStart(){
        ...        
    ResponseReceiver responseReceiver = new ResponseReceiver(this); //passing context
    LocalBroadcastManager.getInstance(this).registerReceiver(responseReceiver,null);
        ...
    }

    public void brCallback(String param){
        Log.d("BroadcastReceiver",param);
    }
}

आशा करता हूँ की ये काम करेगा


यह एकदम सही और सबसे आसान समाधान है। मैं हमेशा अपने ऐप में इसका उपयोग करता हूं।

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);




android methods android-activity broadcastreceiver static-methods