Ich möchte eingehenden Anruf auflegen Ich erkenne es und dann möchte ich auflegen.So importieren Sie com.android.internal.telephony.ITelephony in die Android-Anwendung
Das Problem ist, dass dies: com.android.internal.telephony.ITelephony
ist nicht gelöst.
habe ich versucht Paket com.android.internal.telephony
zu meiner Anwendung hinzufügen und erstellen Schnittstelle:
package com.android.internal.telephony;
public interface ITelephony {
boolean endCall();
void answerRingingCall();
void silenceRinger();
}
aber der Anruf nicht beendet wird.
Hier habe ich erkennen Anruf, Anzeige Toast (es angezeigt wird), dann versuchen bis zu hängen, aber als ich die erste war kein com.android.internal.telephony.ITelephony
, bevor ich das Paket erstellt:
private class CallStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
// called when someone is ringing to this phone
Toast.makeText(ctx, "Incoming: " + incomingNumber, Toast.LENGTH_LONG).show();
try{
TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
com.android.internal.telephony.ITelephony telephonyService = (com.android.internal.telephony.ITelephony) m.invoke(tm);
telephonyService = (com.android.internal.telephony.ITelephony) m.invoke(tm);
telephonyService.silenceRinger();
telephonyService.endCall();
}catch (Exception e) {
e.printStackTrace();
}
break;
}
}
}
Mein Manifest und Berechtigungen:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.a"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".CallDetectService"
android:enabled="true"
android:exported="false" >
</service>
</application>
</manifest>
Es gibt Alternative zu Standard-Dialer (Telefon-Anwendung) im Android Play Store, vielleicht gibt es einen Weg, um es zu umgehen. – Yoda
Oh bitte sehen Sie diese EDIT 3 hier: http://stackoverflow.com/questions/24580223/how-to-reject-any-incoming-call-when-i-have-ready-detected-it/24580252?noredirect=1 # comment38077652_24580252 Es ist meine Frage, wo ich gerade 'ITelephony' Schnittstelle vom grep Code kopierte (http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/com /android/internal/telephony/ITelefony.java/?v=source) zum 'com.android.internal.telephone' Paket. – Yoda
Nur auf der Seite. Warum ist es intern? Bedeutet intern nur privat oder geschützt? Wenn man den Zugriff darauf deaktiviert, dann funktioniert es nicht wirklich, wenn Reflektion den Job erledigt, warum also? – Yoda