2017-04-17 15 views
1

特定の番号からの呼び出しをブロックしたい解決策を試しましたが、エラーが発生します。 このソリューションを試しましたが、機能していません。 https://stackoverflow.com/a/9904826/1937692 それは与えシンボルITelephonyを解決できません

シンボルITelephonyを解決できません

プロジェクト構造:

http://i.hizliresim.com/P02XOd.png

PhoneCallReceiver:

package com.example.myapplication; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
import android.widget.Toast; 
public class PhoneCallReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     PhoneCallStateListener customPhoneListener = new PhoneCallStateListener(context); 
     telephony.listen(customPhoneListener, PhoneStateListener.LISTEN_CALL_STATE); 


    }} 

ITelephony.aidl:

package com.android.internal.telephony; 

interface ITelephony { 

    boolean endCall(); 

    void answerRingingCall(); 

    void silenceRinger(); 
} 

PhoneCallStateListener:

package com.example.myapplication; 

import java.lang.reflect.Method; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.media.AudioManager; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
import android.widget.Toast; 


import com.android.internal.telephony.ITelephony; //Error Line 

    public class PhoneCallStateListener extends PhoneStateListener { 

     private Context context; 
     public PhoneCallStateListener(Context context){ 
      this.context = context; 
     } 


     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 
      SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(context); 

      switch (state) { 

       case TelephonyManager.CALL_STATE_RINGING: 

        String block_number = prefs.getString("block_number", null); 
        AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
        //Turn ON the mute 
        audioManager.setStreamMute(AudioManager.STREAM_RING, true); 
        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
        try { 
         Toast.makeText(context, "in"+block_number, Toast.LENGTH_LONG).show(); 
         Class clazz = Class.forName(telephonyManager.getClass().getName()); 
         Method method = clazz.getDeclaredMethod("getITelephony"); 
         method.setAccessible(true); 
         ITelephony telephonyService = (ITelephony) method.invoke(telephonyManager); //Error Line 
         //Checking incoming call number 
         System.out.println("Call "+block_number); 

         if (incomingNumber.equalsIgnoreCase("+91"+block_number)) { 
          //telephonyService.silenceRinger();//Security exception problem 
          telephonyService = (ITelephony) method.invoke(telephonyManager); 
          telephonyService.silenceRinger(); 
          System.out.println(" in "+block_number); 
          telephonyService.endCall(); 
         } 
        } catch (Exception e) { 
         Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show(); 
        } 
        //Turn OFF the mute 
        audioManager.setStreamMute(AudioManager.STREAM_RING, false); 
        break; 
       case PhoneStateListener.LISTEN_CALL_STATE: 

      } 
      super.onCallStateChanged(state, incomingNumber); 
     }} 

エラー - 赤線: http://i.hizliresim.com/YD8zQA.png

答えて

1

インターフェースITelephonyパッケージ可視したがってパッケージcom.android.internal.telephonyの外部からアクセス可能ではありません。

これは内部Android APIであるためです。

関連する問題