Communication wifi Android/Raspberry
Bonjour à tous,
J'ai un projet à réaliser: un avertisseur d'appel.
Pour réaliser celui-ci je dois créer une application mobile (AndroidStudio) qui détecte les différents état du téléphone (Sonne, Appel en cours, Terminé), chose que j'ai réussi à programmer.
Je vous mets le code ici:
- Android Manifest
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.valoch.myapplication">
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="My Application"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="InterceptCall">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
</application>
</manifest> |
- MainActivity
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| package com.example.valoch.myapplication;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
Manifest.permission.READ_PHONE_STATE)) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
} else {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
}
} else {
//do nothing
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode){
case 1:{
if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
if(ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "permission accordée!", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "Permission non accordée!", Toast.LENGTH_SHORT).show();
}
return;
}
}
}
} |
- InterceptCall (classe java)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| package com.example.valoch.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.widget.Toast;
public class InterceptCall extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){
Toast.makeText(context,"Sonne!", Toast.LENGTH_SHORT).show();
}
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
Toast.makeText(context, "Appel en cours!", Toast.LENGTH_SHORT).show();
}
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)) {
Toast.makeText(context, "Appel terminé!", Toast.LENGTH_SHORT).show();
}
} catch (Exception e){
e.printStackTrace();
}
}
} |
Maintenant j'en suis à l'envoi de ces 3 états à ma Raspberry en wifi. Cependant je n'ai aucune idée de comment adapter mon code Android pour pouvoir communiquer les 3 différents états. Je vois beaucoup de liens vers un échange via des sockets. Mais je n'ai aucune idée de comment réaliser cela. C’est pour ça que je viens vous demander de l'aide.
Je suppose qu'il faut créer une nouvelle classe Java dans mon application mais je ne sais comment faire
En attendant, je continue de chercher de mon coté.
En vous remerciant par avance!:roll: