2015-01-19 3 views
0

Я делаю отмену звонка. В основном это отменяет предстоящий вызов, если ваш телефон находится в заднем положении в таблице или на земле (данные акселерометра). Я делаю Broadcast Receiver и запись его на манифесте также дала действие этого android.intent.action.PHONE_STATEОтмена предстоящего телефонного звонка в android

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

Мой код работает очень хорошо, если я только использовать этот код без класса акселерометра услуг, но когда я использую класс акселерометра и сделать намерение, прежде чем этот ниже код. Мое приложение не отменяет вызов или не дает никакого типа или ошибки. Я думаю, что это не совсем уверен, что это проблема контекста. Так что, пожалуйста, помогите мне.

+0

Благодарим за редактирование моего вопроса, я позабочусь об этом в следующий раз – Pankaj

ответ

0

Нет, это не проблема контекста, весь этот код отлично подходит, вам просто нужно условие или использовать sharedpreferences для условия. сначала создайте объект sharedpreferences в своем классе обслуживания или то, что вы показываете в намерении. как этот

SharedPreferences sharedpref=this.getSharedPreferences("your_file_name",Context.MODE_PRIVATE); 
    SharedPreferences.Editor sharededit=sharedpref.edit(); 

sharededit.putBoolean("String_name", true); sharededit.commit();

Здесь булево не важно, вы можете выбрать и ввести другие данные, это зависит от вас.

Тогда в вас Broadcast receiver класса вы должны снова использовать эти 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(); 
    } } 

Это теперь ваш код запускается без ошибок.