Sono appena entrato nello sviluppo Android
e ho deciso che la mia prima conquista in questo campo sarebbe stata capire come il telefono ha reagito alle chiamate in arrivo.Android, TelephonyManager, le gioie di PhoneStateListener e i numeri in entrata
Un po 'googling in seguito mi ha portato a http://www.compiletimeerror.com/2013/08/android-call-state-listener-example.html#.Vi3Ren4vfwM (quindi il mio codice condivide una sorprendente somiglianza con il suo/lei).
La mia principale attività (e solo) si presenta così:
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TelephonyManager TelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
TelephonyMgr.listen(new TeleListener(),
PhoneStateListener.LISTEN_CALL_STATE);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
class TeleListener extends PhoneStateListener {
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
// CALL_STATE_IDLE;
Log.d("MyLittleDebugger", "I'm in " + state + " and the number is " + incomingNumber);
Toast.makeText(getApplicationContext(), "CALL_STATE_IDLE",
Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
// CALL_STATE_OFFHOOK;
Log.d("MyLittleDebugger", "I'm in " + state + " and the number is " + incomingNumber);
Toast.makeText(getApplicationContext(), "CALL_STATE_OFFHOOK",
Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_RINGING:
// CALL_STATE_RINGING
Log.d("MyLittleDebugger", "I'm in " + state + " and the number is " + incomingNumber);
Toast.makeText(getApplicationContext(), incomingNumber,
Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), "CALL_STATE_RINGING",
Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}
}
Ora, ecco dove il divertimento si ferma. Ho fatto funzionare l'app su emulatore, e ho usato DDMS
per falsificare alcune telefonate al mio dispositivo emulato per vedere dove sono caduti i pezzi.
E sicuramente abbastanza pane tostato spuntò e MyLittleDebugger
divampato su swap di stato. L'ascoltatore stava funzionando, tuttavia nessun numero veniva mai mostrato nel mio registro o nel mio brindisi.
Era vuoto dove il numero avrebbe dovuto essere! Nulla o nulla, no, ma vuoto!
Dopo un po 'più googling, ho capito che il mio AndroidManifest.xml
potrebbe essere il problema. E 'come segue:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.x.xy" >
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
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>
</application>
Ora, ecco la domanda: che cosa mi manca?
Chiaramente, una piccola parte di qualcosa è andata male da qualche parte, perché sono in grado di avere l'oggetto .listen()
per chiamare gli stati, ma non riesco a ottenere il numero da mostrare.
Nuove informazioni:
Ho anche provato questo sul mio telefono, non emulando al esattamente lo stesso risultato.
Ho eseguito il codice e ha funzionato per me. # è apparso usando la chiamata simulata con ddm. – JJF
Anche la mia app non funzionerebbe nemmeno se non avessi dato il permesso READ_PHONE_STATE. Sembra diverso da quello che hai visto. Su quali versioni di Android hai provato questo? – JJF
Ho lo stesso identico problema ma il ricevitore non funziona per me. – Mainak