正在取消 android 即将到来的 phone 通话

Cancelling upcoming phone call in android

我正在制作 phone 呼叫取消应用程序。如果您的 phone 在 table 或地面(加速度计数据)中处于后方位置,它基本上会取消即将到来的呼叫。我做了一个 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");
    }
}

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

不,这不是上下文问题,所有这些代码都非常好,您只需要一个条件或使用 sharedpreferences 作为条件。 首先在您的服务 class 或您有意显示的对象中创建一个 sharedpreferences 对象。像这样

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

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

这里boolean不重要你可以选择其他数据类型就看你了。

然后在你 Broadcast receiver class 你必须再次使用这些 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();
    } }

这就是全部,现在您的代码 运行 没有任何错误。