Android 阻止来电

Android 阻止来电,android,Android,我试图阻止来自特定号码的来电,我设法检测到了来电及其号码。 但是,我无法阻止该呼叫。我浏览了我在这个网站和其他网站上找到的所有代码,我想可能是由于android的新版本或每个设备的核心差异(我拥有LG4),这些代码不起作用 再想一想,有人能解释一下在这个软件包中创建ITelephony的重要性吗 package com.android.internal.telephony; 这是我的代码: package com.darkmoonapps.telephony; import android.

我试图阻止来自特定号码的来电,我设法检测到了来电及其号码。 但是,我无法阻止该呼叫。我浏览了我在这个网站和其他网站上找到的所有代码,我想可能是由于android的新版本或每个设备的核心差异(我拥有LG4),这些代码不起作用

再想一想,有人能解释一下在这个软件包中创建ITelephony的重要性吗

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);
    }
}