取消即将在Android中拨打的电话

时间:2015-01-19 07:30:53

标签: android android-intent android-context

我拨打电话取消应用。如果您的手机处于桌面或地面的后退位置(加速计数据),它基本上会取消即将召开的通话。我制作了一个Broadcast Receiver,并在清单上输入了这个android.intent.action.PHONE_STATE

public class PhoneCallReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        Intent si=new Intent(context, MyService.class);
        context.startService(si);
        TelephonyManager telephony = (TelephonyManager) 
            context.getSystemService(Context.TELEPHONY_SERVICE);  
        try {
            Class c = Class.forName(telephony.getClass().getName());
            Method m = c.getDeclaredMethod("getITelephony");
            m.setAccessible(true);
            telephonyService = (ITelephony) m.invoke(telephony);
            //telephonyService.silenceRinger();
            telephonyService.endCall();
            Log.e("in try catch", "yes");
            Log.e("in try catch", "call cancel");
            shrededit.putInt("newcallingstate", 0);
            shrededit.commit();
            context.stopService(si);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.e("pr", "out side true block");
    }
}

如果我只使用没有加速度计服务类的代码,但是当我使用加速度计类并在下面的代码之前做出意图时,我的代码运行得非常好。我的应用程序没有取消呼叫或没有给出任何类型或错误。我认为但不完全确定它是上下文问题。 所以请帮助我。

1 个答案:

答案 0 :(得分:0)

不,它不是上下文问题所有这些代码都非常好,你只需要条件或使用共享偏好条件。 首先在服务类中创建一个sharedpreferences对象,或者在intent中显示一个。像这样

 SharedPreferences sharedpref=this.getSharedPreferences("your_file_name",Context.MODE_PRIVATE);
    SharedPreferences.Editor sharededit=sharedpref.edit();

sharededit.putBoolean("String_name", true); sharededit.commit();

这里布尔值并不重要,你可以选择它和你依赖的其他数据类型。

然后在Broadcast receiver课程中,您必须再次使用这些SharedPreferenceSharedPreference.Editor函数,并通过此方法获得之前的boolean

boolean value=sharededit.getBoolean("callingStop", true);

比制造这样的条件

if(value==true){TelephonyManager telephony = (TelephonyManager) 
        context.getSystemService(Context.TELEPHONY_SERVICE);  
    try {
        Class c = Class.forName(telephony.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        telephonyService = (ITelephony) m.invoke(telephony);
        //telephonyService.silenceRinger();
        telephonyService.endCall();

    } catch (Exception e) {
        e.printStackTrace();
    } }

这就是现在你的代码运行没有任何错误。