I have a task in which I have to send E-Mail each day once.
I used Service triggered by AlarmManager to achieve this. It's working properly. But the problem is the mail gets send only if the mobile data is available. So I tried to turn on the data connection and send mail. Mobile data is enabled but, Mail not sending. I have posted here what I've tried. Someone please suggest a method to wait until the user turn on mobile data and send mail. Thank you.
cm=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        ni=cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        isConnected=ni!=null&&ni.isConnected();
        Mail m=new Mail("xxxxxxxxx@gmail.com","xxxxxxx");
        String[] strTo={"xxxxxxxxx@gmail.com"};
        m.setTo(strTo);
        m.setFrom("xxxxxxxxxx@gmail.com");
        m.setSubject("Subject");
        m.setBody("Please find the attachment");
        try{
            m.addAttachment(Environment.getExternalStorageDirectory() + "/xxxxx/xxxxxx.xx");
            if (isConnected){
                m.send();
            }else {
                ConnectivityManager dataManager;
                dataManager  = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
                Method dataMtd = null;
                try {
                    dataMtd = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class);
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                }
                dataMtd.setAccessible(true);
                try {
                    dataMtd.invoke(dataManager, true);
                } catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e) {
                    e.printStackTrace();
                }
                NetworkInfo netInfo=dataManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
                boolean isOnline=netInfo!=null&&netInfo.isConnected();
                if(isOnline){
                    if (m.send()){
                        ConnectivityManager dataManager1;
                        dataManager1  = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
                        Method dataMtd1 = null;
                        try {
                            dataMtd1 = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class);
                        } catch (NoSuchMethodException e) {
                            e.printStackTrace();
                        }
                        dataMtd1.setAccessible(false);
                        try {
                            dataMtd1.invoke(dataManager1, false);
                        } catch (IllegalArgumentException | IllegalAccessException | InvocationTargetException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }catch (final Exception e){
            e.printStackTrace();
            Log.v("My_Service",e.toString());
        }
 
     
     
     
    