正在取消 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 你必须再次使用这些 SharedPreference
和 SharedPreference.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();
} }
这就是全部,现在您的代码 运行 没有任何错误。
我正在制作 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 你必须再次使用这些 SharedPreference
和 SharedPreference.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();
} }
这就是全部,现在您的代码 运行 没有任何错误。