1°) Téléphoner :
Dans le fichier manifest .xml ajout de la permission CALL_PHONE (extrait du manifest) :
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<application ....
Ajouter le code :
private void call(String num) {
try {
Intent callIntent = new Intent(Intent.ACTION_CALL); //-- ACTION_DIAL : Affiche n° //-- ACTION_CALL : numérote et effectue l'appel
callIntent.setData(Uri.parse("tel:"+num));
startActivity(callIntent);
} catch (ActivityNotFoundException e) {
Log.e("helloandroid dialing example", "Call failed", e);
}
}
2°) Pour envoyer des SMS
(version KitKat 4.4)
:
Placer les permissions dans le fichier AndroidManifest.xml
:
<uses-permission android:name="android.permission.RECEIVE_SMS"> </uses-permission> <uses-permission android:name="android.permission.READ_SMS"> </uses-permission>
<uses-permission android:name="android.permission.SEND_SMS"> </uses-permission>
Importer les pakages
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
Ajouter le code :
private void SendSms(String num) {
String message = "Hello World!";
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(num, null, message, null, null);
}
Pour expédier un message de plus de 160 caractères :
Le SMS source est divisé en plusieurs SMS contenus dans un tableau. Cette opération est réalisée par l’instruction
smsManager.divideMessage("message à diviser..."); Ainsi le code source devient :
SmsManager smsManager = SmsManager.getDefault(); String msg="Message très très long à diviser, blabla...."; ArrayList<String> msgArray = smsManager.divideMessage(msg); smsManager.sendMultipartTextMessage(phoneNumber, null, msgArray, null, null);
En résumé, envoi de SMS :
Via Intent :
Intent intent;
intent = new Intent(Intent.ACTION_VIEW);
intent.setType("vnd.android-dir/mms-sms");
intent.putExtra("address", phoneNo);
intent.putExtra("sms_body",msg );
startActivity(intent);
Dans le cas d’un intent, pas de permission à demander…
Sans intent :
Inclure dans le fichier manifest la permission :
<uses-permission android:name= »android.permission.SEND_SMS » />
Placez les deux lignes de code dans votre activité :
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNo, null, msg, null, null);
Où phoneNo contiendra le n° de téléphone (String) et msg le texte à envoyer.
3°) Envoi de mails :
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{"youremail@yahoo.com"});
email.putExtra(Intent.EXTRA_SUBJECT, "subject");
email.putExtra(Intent.EXTRA_TEXT, "message");
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Choose an Email client :"));
Pour envoyer des mails sans intents avec JAVAMAIL:
Ajoutez dans le module app gradle :
android {
packagingOptions {
pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
}
}
repositories {
jcenter()
maven {
url "https://maven.java.net/content/groups/public/"
}
}
dependencies {
compile 'com.sun.mail:android-mail:1.5.5'
compile 'com.sun.mail:android-activation:1.5.5'
}
and do
Et envoyez le mail en utilisant un thread séparé :
if (isOnline()) { haveWifiConnection(); haveMobileConnection(); Thread thread = new Thread(new Runnable() { @Override public void run() { try { ///////////////// ///////////////// final String username = "silvain.cloulas@gmail.com"; final String password = "ChiccoBretzel@2017"; Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("silvain.cloulasl@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("andrologiciels@gmail.com")); message.setSubject("Testing Subject"); message.setText("Dear Mail Crawler," + "\n\n No spam to my email, please!"); /* MimeBodyPart messageBodyPart = new MimeBodyPart(); Multipart multipart = new MimeMultipart(); messageBodyPart = new MimeBodyPart(); String file = "path of file to be attached"; String fileName = "attachmentName"; DataSource source = new FileDataSource(file); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(fileName); multipart.addBodyPart(messageBodyPart); message.setContent(multipart); */ Transport.send(message); Log.d("EnvoiMail", "Message envoyé"); } catch (MessagingException e) { throw new RuntimeException(e); } /////////////////// } catch (Exception e) { Log.e("EnvoiMail", e.getMessage()); } } }); thread.start(); /////////// } else { Toast.makeText(MainActivity.this, "You are not online!!!!", Toast.LENGTH_LONG).show(); }
////-- Test Network public boolean isOnline() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo != null && netInfo.isConnectedOrConnecting()) { return true; } return false; } ////--Test WIFI private boolean haveWifiConnection() { boolean haveConnectedWifi = false; ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] netInfo = cm.getAllNetworkInfo(); for (NetworkInfo ni : netInfo) { if (ni.getTypeName().equalsIgnoreCase("WIFI")) if (ni.isConnected()) { haveConnectedWifi = true; Toast.makeText(MainActivity.this, "WIFI", Toast.LENGTH_SHORT).show(); } } return haveConnectedWifi; } ////-- Test Mobile private boolean haveMobileConnection() { boolean haveConnectedMobile = false; ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] netInfo = cm.getAllNetworkInfo(); for (NetworkInfo ni : netInfo) { if (ni.getTypeName().equalsIgnoreCase("MOBILE")) if (ni.isConnected()) { haveConnectedMobile = true; Toast.makeText(MainActivity.this, "MOBILE", Toast.LENGTH_SHORT).show(); } } return haveConnectedMobile; }
Références :
https://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/
https://stackoverflow.com/questions/25136025/sending-mail-in-android-without-intents-using-smtp
http://rainylinkb.blogspot.fr/2013/01/sending-email-from-android-in.html
http://www.codeproject.com/Articles/548416/Detecting-incoming-and-outgoing-phone-calls-on-And
http://www.compiletimeerror.com/2013/06/send-sms-in-android-example.html
http://www.discretelogix.com/blog/android-articles/send-sms-programmatically-in-android
http://www.mkyong.com/android/how-to-send-email-in-android/
Votre commentaire