Ich habe sehr neu in Android
Entwicklung bekommen, und entschied, dass meine erste Eroberung auf diesem neuen Gebiet wäre zu erfassen, wie das Telefon auf eingehende Anrufe reagiert.Android, TelephonyManager, die Freuden von PhoneStateListener und eingehende Nummern
Ein wenig googeln führte mich später zu http://www.compiletimeerror.com/2013/08/android-call-state-listener-example.html#.Vi3Ren4vfwM (so hat mein Code eine frappierende Ähnlichkeit zu seinem/ihr).
Mein Haupt (und einzige) Aktivität sieht wie folgt aus:
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;
}
}
}
}
Nun, hier ist, wo der Spaß aufhört. Ich habe die App auf Emulator laufen lassen und DDMS
verwendet, um ein paar Telefonanrufe auf mein emuliertes Gerät zu spoofen, um zu sehen, wo die Stücke gelandet sind.
Und sicherlich genug Toast aufgetaucht und MyLittleDebugger
flammte bei staatlichen Swaps. Der Zuhörer arbeitete, aber in meinem Logbuch oder meinem Toast wurde nie eine Nummer angezeigt.
Es war nur leer, wo die Nummer hätte sein sollen! Nicht null oder irgendetwas, nein, aber leer!
Nach ein wenig mehr googeln, erkannte ich, dass meine AndroidManifest.xml
könnte das Problem sein. Es ist wie folgt:
<?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>
Nun, hier ist die Frage: Was bin ich dabei?
Offensichtlich ist ein kleiner Bruchteil von etwas irgendwo falsch gelaufen, weil ich mein TelephonyMgr
Objekt .listen()
haben kann, um Zustände zu nennen, aber ich kann die Zahl nicht bekommen, um zu zeigen.
Neue Informationen:
Ich habe dies auch versucht, auf meinem Handy, ohne auf das exakt gleiche Ergebnis zu emulieren.
Ich lief Ihren Code und es hat für mich funktioniert. # tauchte mit ddm gefälschten Anruf auf. – JJF
Auch meine App würde nicht einmal ausgeführt, wenn ich es nicht READ_PHONE_STATE Erlaubnis geben würde. Das klingt anders als das, was du gesehen hast. Mit welchen Versionen von Android hast du das versucht? – JJF
Ich habe genau das gleiche Problem, aber der Rundfunkempfänger funktioniert nicht für mich. – Mainak