プライベートボイド[終了](最終文字列cutofftime){
TelephonyManager telephony = (TelephonyManager) srvs
.getSystemService(Context.TELEPHONY_SERVICE);
Class c;
final com.android.internal.telephony.ITelephony telephonyService;
try {
c = Class.forName("android.telephony.TelephonyManager");//telephony.getClass().getName());
Log.i("TelephonyClass Name", telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(telephony);
TimerTask task = new TimerTask() {
@Override
public void run() {
try {
if (telephonyService.isIdle()
|| telephonyService.isOffhook()
|| telephonyService.isRinging())
telephonyService.endCall();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
long delay = Integer.parseInt(cutofftime) * 1000;
new Timer().schedule(task, delay);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
あなたが意味する、私たちは、STILプログラム的に呼び出しを受け入れ、拒否することITelephony.aidl技術を使用することができますが、それだけでは動作しません。無声音?それから、唯一の解決策は、aidlファイルのsilenceRingerにコメントすることです。 Plsは、あなたがこれを発見したことで、この技術を新しいアプリケーションの設計に利用できるようになると示唆しています。 –
2.3.6では、iTelephonyを使用したendCall()がそれを行います。アクセス権の問題を引き起こすのは本当にsilenceRinger()です。実際のコードでsilenceRinger()をコメントするだけで、AIDLをそのままにしておくことができます。私は1.5から2.2でこれをテストしていないが、まもなくそうしようとしている。このページでお知らせします。 –
うわー...私は実際にコード内でendCall()を持っていましたが、if文のためにヒットしませんでした。私は、APIが無効になっているため、機能していないと仮定しました。 Googleがこの問題を修正しないように、あなたの回答にフラグを立てたいと思っています! :) +1 – you786