Android 阻止来电
我试图阻止来自特定号码的来电,我设法检测到了来电及其号码。 但是,我无法阻止该呼叫。我浏览了我在这个网站和其他网站上找到的所有代码,我想可能是由于android的新版本或每个设备的核心差异(我拥有LG4),这些代码不起作用 再想一想,有人能解释一下在这个软件包中创建ITelephony的重要性吗Android 阻止来电,android,Android,我试图阻止来自特定号码的来电,我设法检测到了来电及其号码。 但是,我无法阻止该呼叫。我浏览了我在这个网站和其他网站上找到的所有代码,我想可能是由于android的新版本或每个设备的核心差异(我拥有LG4),这些代码不起作用 再想一想,有人能解释一下在这个软件包中创建ITelephony的重要性吗 package com.android.internal.telephony; 这是我的代码: package com.darkmoonapps.telephony; import android.
package com.android.internal.telephony;
这是我的代码:
package com.darkmoonapps.telephony;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.widget.Toast;
import com.android.internal.telephony.ITelephony;
import java.lang.reflect.Method;
/**
* Created by Shai on 19/12/2017.
*/
public class incomingCalls extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ITelephony telephonyService;
try {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
String number = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Method m = tm.getClass().getDeclaredMethod("getITelephony");
m.setAccessible(true);
telephonyService = (ITelephony) m.invoke(tm);
if ((number != null)) {
telephonyService.endCall();
}
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(context, "Ring " + number, Toast.LENGTH_SHORT).show();
}
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)){
Toast.makeText(context, "Answered " + number, Toast.LENGTH_SHORT).show();
}
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)){
Toast.makeText(context, "Idle "+ number, Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
这是我的电话:
package com.android.internal.telephony;
/**
* Created by Shai on 19/12/2017.
*/
public interface ITelephony {
boolean endCall();
void answerRingingCall();
void silenceRinger();
}
谢谢 我和你面临着同样的问题。我找到了解决方案并一步一步地记录下来 这里是我遗漏的最重要的部分:在运行时请求权限。这是阻碍我成功实现这一目标的一个因素 也就是说,在Android 6.0+之后,即使您在
AndroidManifest.xml
文件中设置了权限,您仍然必须明确地向用户询问是否属于危险权限类别
要请求此类权限,您可以使用以下代码(我在MainActivity.java
的onCreate
方法中使用了它):
以下是完整内容的帖子:
TL;博士
在这篇文章中,我将一步一步地向你展示如何制作一个本地Android应用程序,它可以阻止某些号码打电话给你
源代码是
我希望我将在这里向你们展示的分步指南能够帮助你们,避免你们做额外的研究
当然,由于我在日常工作中不是一名本地安卓开发者,所以我这么做也是为了提醒我什么时候需要再次处理类似的情况。向其他人大声呼喊#jackOfAllTrades你在这方面有什么进展吗?不幸的是没有,有什么想法?我在下面提供的答案对你有帮助吗?谢谢,我很高兴这证明对你有用@SergBurlaka
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED || checkSelfPermission(Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_DENIED) {
String[] permissions = {Manifest.permission.READ_PHONE_STATE, Manifest.permission.CALL_PHONE};
requestPermissions(permissions, PERMISSION_REQUEST_READ_PHONE_STATE);
}
}