BroadcastReceiver不会调用onReceive方法

时间:2016-12-09 18:51:14

标签: java android xml broadcastreceiver

我试图创建一个阻止与ITelephony通话的应用,具体取决于我在主要活动中按下了哪个单选按钮。但是,我的onReceive方法永远不会被调用,因此不会阻止调用。

这是我的类,它扩展了BroadcastReceiver

private void grdTable_DoubleClick(object sender, MouseButtonEventArgs e)
{
  adp.Update(ds.Tables[0]);
} 

这是我的AndroidManifest.xml

   public class CallBlocking extends BroadcastReceiver {
        private static final int MODE_WORLD_READABLE = 1;
        private String mPhoneNumber;
        private String mCallerName;
        private SharedPreferences mPreferences;


        @Override
        public void onReceive(Context context, Intent intent) {
            mPreferences = context.getSharedPreferences("mPreferences", MODE_WORLD_READABLE);
            String blockMode = mPreferences.getString("mode", "not retrieved");
            if (!blockMode.equals("cancel")) {
                Bundle b = intent.getExtras();
                String phoneState = b.getString(TelephonyManager.EXTRA_STATE);
                if ((phoneState.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))) {
                    mPhoneNumber = b.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
                    if (blockMode.equals("all")) {
                        disconnect(context);
                    } else if (blockMode.equals("unsaved")) {
                        mCallerName = getContactName( mPhoneNumber, context);
                        if((mCallerName == null) || (mCallerName.length() < 2))
                            disconnect(context);
                        else if (blockMode.equals("list"))
                        {
                           if(CallBlockerFragment.sBlockedList.contains(new BlockedList(mPhoneNumber)))
                              disconnect(context);
                        }
                    }
                }
            }
        }

        @SuppressWarnings({"rawtypes", "unchecked"})
        private void disconnect(Context context) {
            ITelephony telephonyService;
            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.endCall();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public String getContactName(String phoneNumber, Context context) {
            Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
            String callerName = "?";
            String data = null;
            ContentResolver contentResolver = context.getContentResolver();
            Cursor findContact = contentResolver.query(uri, new String[] {BaseColumns._ID,
                ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null);

            try {
                if (findContact != null && findContact.getCount() > 0) {
                    findContact.moveToNext();
                    data = findContact.getString((findContact.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)));
                }
            }
            finally
            {
                if(findContact != null)
                    findContact.close();
            }

            return data;
        }

    }

为什么不调用onReceive方法?

1 个答案:

答案 0 :(得分:0)

也许你想要实现的是听取手机状态变化...请查看以下链接Listen to Change of Phone State State - Android