これはSOでよく知られている質問です。そして、私が必要なのは、プログラムで通話を終了することです。私はたくさん検索しました...
http://androidsourcecode.blogspot.in/2010/10/blocking-incoming-call-Android.htmlhttp://androiddesk.wordpress.com/2012/08/02/ブロック中の呼び出しなしのユーザー介入介入-Android /
プログラムで通話に応答/終了する方法Android 4.1?
http://www.emoticode.net/Android-sdk/block-incoming-and-outgoing-phone-calls-programmatically.html
Androidアプリケーション開発? で携帯電話の通話とメッセージの受信をブロックする方法==
および http://androidsourcecode.blogspot.in/2010/10/blocking-incoming-call-Android.html
さらに多くの質問、回答、提案...
すべてが使用ITelephonyService.aidl
TelephonyManager と組み合わせて
そして、ソリューションは多くのデバイスで完璧に機能していますが、Samsung S Duosでは機能しません。 1週間以上苦労していますが、解決策がありませんでした。このタイプのデバイスで使用できる特別なAPIはありますか?着信を拒否するにはどうすればよいですか?私を助けてください...
これが機能するのを確認してください。それは私にとってはうまくいきます。
ITelephony.Javaファイルは ITelephony.Java からダウンロードできます。
その後、呼び出しを終了するメソッドを追加します。
public void disconnectCall(){
try {
String serviceManagerName = "Android.os.ServiceManager";
String serviceManagerNativeName = "Android.os.ServiceManagerNative";
String telephonyName = "com.Android.internal.telephony.ITelephony";
Class<?> telephonyClass;
Class<?> telephonyStubClass;
Class<?> serviceManagerClass;
Class<?> serviceManagerNativeClass;
Method telephonyEndCall;
Object telephonyObject;
Object serviceManagerObject;
telephonyClass = Class.forName(telephonyName);
telephonyStubClass = telephonyClass.getClasses()[0];
serviceManagerClass = Class.forName(serviceManagerName);
serviceManagerNativeClass = Class.forName(serviceManagerNativeName);
Method getService = // getDefaults[29];
serviceManagerClass.getMethod("getService", String.class);
Method tempInterfaceMethod = serviceManagerNativeClass.getMethod("asInterface", IBinder.class);
Binder tmpBinder = new Binder();
tmpBinder.attachInterface(null, "fake");
serviceManagerObject = tempInterfaceMethod.invoke(null, tmpBinder);
IBinder retbinder = (IBinder) getService.invoke(serviceManagerObject, "phone");
Method serviceMethod = telephonyStubClass.getMethod("asInterface", IBinder.class);
telephonyObject = serviceMethod.invoke(null, retbinder);
telephonyEndCall = telephonyClass.getMethod("endCall");
telephonyEndCall.invoke(telephonyObject);
} catch (Exception e) {
e.printStackTrace();
Log.error(DialerActivity.this,
"FATAL ERROR: could not connect to telephony subsystem");
Log.error(DialerActivity.this, "Exception object: " + e);
}
}
この機能を試してください:
private void endCall() {
Context context = getApplicationContext();
try {
TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
Class<?> c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephonyService = (ITelephony) m.invoke(telephony);
// Funciona en 2.2
// Funciona en 2.3.3
telephonyService.endCall();
logManager.debug("ITelepony was used (endCall)");
} catch (Exception e) {
logManager.error("Error ending call: " + e.getMessage());
logManager.debug("Error ending call", e);
}
}