2013-03-30 108 views
0
  • 我試圖在使用電話管理器和BroadCastReceiver的項目中實現自動應答。
  • 它的工作正常,但不幸的是APP崩潰時,我再次啓動移動。隨函附上我重視我的代碼和清單文件also.kindly任何一個可以幫助我們解決

代碼:java.lang.RuntimeException:無法實例化接收器:java.lang.ClassNotFoundException

AutoAnswerReceiver的.java

public class AutoAnswerReceiver extends BroadcastReceiver { 

    SharedPreferences mPrefs; 
    static String PREFS_NAMES = "AutoAnswer"; 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     mPrefs = context.getSharedPreferences(PREFS_NAMES, 0); 

     String AutoResult = mPrefs.getString("AutoAnswer", "FALSE"); 

     // Check phone state 
     String phone_state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
     String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 

     if (phone_state.equals(TelephonyManager.EXTRA_STATE_RINGING) && AutoResult.equals("TRUE")) 
     { 
       context.startService(new Intent(context, AutoAnswerIntentService.class)); 

     } 
     } 

    **AutoAnswerIntentService** 

public class AutoAnswerIntentService extends IntentService { 

    public AutoAnswerIntentService() { 
     super("AutoAnswerIntentService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     Context context = getBaseContext(); 


     // Let the phone ring for a set delay 
     try { 
      Thread.sleep(Integer.parseInt("5") * 1000); 
     } catch (InterruptedException e) { 
      // We don't really care 
     } 


     // Make sure the phone is still ringing 
     TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
     if (tm.getCallState() != TelephonyManager.CALL_STATE_RINGING) { 
      return; 
     } 

     // Answer the phone 
     try { 
      answerPhoneAidl(context); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      Log.d("AutoAnswer","Error trying to answer using telephony service. Falling back to headset."); 
      answerPhoneHeadsethook(context); 
     } 

     // Enable the speakerphone 

      enableSpeakerPhone(context); 

     return; 
    } 

    private void enableSpeakerPhone(Context context) { 
     AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
     audioManager.setSpeakerphoneOn(true); 
    } 

    private void answerPhoneHeadsethook(Context context) { 
     // Simulate a press of the headset button to pick up the call 
     Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON);  
     buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK)); 
     context.sendOrderedBroadcast(buttonDown, "android.permission.CALL_PRIVILEGED"); 

     // froyo and beyond trigger on buttonUp instead of buttonDown 
     Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON);  
     buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); 
     context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 
    } 

    @SuppressWarnings("unchecked") 
    private void answerPhoneAidl(Context context) throws Exception { 
     // Set up communication with the telephony service (thanks to Tedd's Droid Tools!) 
     TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
     Class c = Class.forName(tm.getClass().getName()); 
     Method m = c.getDeclaredMethod("getITelephony"); 
     m.setAccessible(true); 
     ITelephony telephonyService; 
     telephonyService = (ITelephony)m.invoke(tm); 

     // Silence the ringer and answer the call! 
     telephonyService.silenceRinger(); 
     telephonyService.answerRingingCall(); 
    } 
} 

清單文件

<receiver android:name=".AutoAnswerReceiver" android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 
<receiver android:name=".AutoAnswerBootReceiver" android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
<service android:name="AutoAnswerIntentService" /> 

當應用程序在舞臺上電的情況下被running.But它工作正常,這表明像

錯誤

錯誤

03-30 09:54:22.013: E/AndroidRuntime(200): Uncaught handler: thread main exiting due to uncaught exception 
03-30 09:54:22.023: E/AndroidRuntime(200): java.lang.RuntimeException: Unable to instantiate receiver com.slet.routemytrips.beta.AutoAnswerBootReceiver: java.lang.ClassNotFoundException: com.slet.routemytrips.beta.AutoAnswerBootReceiver in loader [email protected] 
03-30 09:54:22.023: E/AndroidRuntime(200): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2616) 
03-30 09:54:22.023: E/AndroidRuntime(200): at android.app.ActivityThread.access$3100(ActivityThread.java:119) 
03-30 09:54:22.023: E/AndroidRuntime(200): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) 
03-30 09:54:22.023: E/AndroidRuntime(200): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-30 09:54:22.023: E/AndroidRuntime(200): at android.os.Looper.loop(Looper.java:123) 
03-30 09:54:22.023: E/AndroidRuntime(200): at android.app.ActivityThread.main(ActivityThread.java:4363) 
03-30 09:54:22.023: E/AndroidRuntime(200): at java.lang.reflect.Method.invokeNative(Native Method) 
03-30 09:54:22.023: E/AndroidRuntime(200): at java.lang.reflect.Method.invoke(Method.java:521) 
03-30 09:54:22.023: E/AndroidRuntime(200): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
03-30 09:54:22.023: E/AndroidRuntime(200): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
03-30 09:54:22.023: E/AndroidRuntime(200): at dalvik.system.NativeStart.main(Native Method) 
03-30 09:54:22.023: E/AndroidRuntime(200): Caused by: java.lang.ClassNotFoundException: com.slet.routemytrips.beta.AutoAnswerBootReceiver in loader [email protected] 
03-30 09:54:22.023: E/AndroidRuntime(200): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 
03-30 09:54:22.023: E/AndroidRuntime(200): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 
03-30 09:54:22.023: E/AndroidRuntime(200): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 
03-30 09:54:22.023: E/AndroidRuntime(200): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2609) 
03-30 09:54:22.023: E/AndroidRuntime(200): ... 10 more 
03-30 09:54:22.083: I/Process(51): Sending signal. PID: 200 SIG: 3 
03-30 09:54:22.102: I/dalvikvm(200): threadid=7: reacting to signal 3 
03-30 09:54:22.102: E/dalvikvm(200): Unable to open stack trace file '/data/anr/traces.txt': Permission denied 
+0

「AutoAnswerBootReceiver」在哪裏? – 323go

+0

錯誤是正確的。您沒有名爲AutoAnswerBootReceiver的班級 –

+0

我明白錯誤...謝謝.... –

回答

1

這裏是類文件,該文件missing

創建一個文件AutoAnswerBootReceiver.java

package com.example.autoanswer; // Just change the package name to yours 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class AutoAnswerBootReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
       AutoAnswerNotifier notifier = new AutoAnswerNotifier(context); 
       notifier.updateNotification(); 
     } 

} 
+0

感謝您的建議。現在工作正常.......謝謝 –

相關問題