2013-05-13 78 views
-1

我的應用程序在啓動時發生崩潰並出現以下錯誤。應用程序未與FATAL EXCEPTION啓動

05-13 05:55:33.031: E/AndroidRuntime(1022): FATAL EXCEPTION: main 
05-13 05:55:33.031: E/AndroidRuntime(1022): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.myphonecall/com.example.myphonecall.MyPhoneCall}: java.lang.ClassCastException: com.example.myphonecall.MyPhoneCall cannot be cast to android.app.Activity 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at android.os.Looper.loop(Looper.java:137) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at dalvik.system.NativeStart.main(Native Method) 
05-13 05:55:33.031: E/AndroidRuntime(1022): Caused by: java.lang.ClassCastException: com.example.myphonecall.MyPhoneCall cannot be cast to android.app.Activity 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at android.app.Instrumentation.newActivity(Instrumentation.java:1054) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 
05-13 05:55:33.031: E/AndroidRuntime(1022):  ... 11 more 

CODE

MyPhoneCall.java 包com.example.myphonecall;

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
import android.widget.Toast; 

public class MyPhoneCall extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     String state = extras.getString(TelephonyManager.EXTRA_STATE); 
     Log.w("MY_DEBUG_TAG", state); 
     if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
    String phoneNumber = extras 
     .getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
    //Log.w("MY_DEBUG_TAG", phoneNumber); 
    Toast.makeText(context, "Getting Call from "+phoneNumber, Toast.LENGTH_LONG).show(); 
     } 
    } 
    } 
} 

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.myphonecall" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="15" /> 

    <uses-permission android:name="android.permission.READ_PHONE_STATE" > 
    </uses-permission> 

    <application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
     <activity 
     android:name=".MyPhoneCall" 
     android:label="MyPhoneCall" > 
     <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver android:name="MyPhoneReceiver" > 
     <intent-filter> 
     <action android:name="android.intent.action.PHONE_STATE" > 
     </action> 
     </intent-filter> 
    </receiver> 
    </application> 



</manifest> 
+0

我認爲你有你的活動和你的接收器顛倒,因爲你確實定義了MyPhoneReceiver,但是你將BroadcastReceiver應用到MyPhoneCall類。這個類應該在接收者中定義,就像答案所示。哪個班級有你的實際活動,因爲我沒有在你的MyPhoneCall課程中看到它...... – Neil 2013-05-13 06:15:14

回答

0

某處你正在嘗試啓動類視爲一個活動。它不是一個接收器。活動是一個帶有UI的工作流程,可以接受用戶輸入並保存電話的前景。 BroadcastReceiver是一段短暫的代碼,它響應一個事件然後消失。它沒有用戶界面,不會與用戶交互,並很快退出。基於這個和上一個問題,我不認爲你理解他們。

+0

是的,你可能是對的。我現在需要做什麼? – user2235614 2013-05-13 06:12:07

0

在Manifest中,您已將MyPhoneCall聲明爲活動。但是在代碼中,您已經使用廣播接收器擴展了MyPhoneCall類。

0

Beacuse MyPhoneCall類沒有擴展Activity類那爲什麼這個錯誤。不要放入活動區塊。只需在收貨人登記在清單

2

您的MyPhoneCallBroadcastReceiver並且您聲明它爲activity。所以它給你錯誤。

05-13 05:55:33.031: E/AndroidRuntime(1022): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.myphonecall/com.example.myphonecall.MyPhoneCall}: java.lang.ClassCastException: com.example.myphonecall.MyPhoneCall cannot be cast to android.app.Activity 

聲明如下。

<receiver android:name=".MyPhoneCall" > 
     <intent-filter> 
      <action ...... /> 
      <action ..... /> 
     </intent-filter> 
    </receiver> 
+0

完成但沒有你.. – user2235614 2013-05-13 06:25:07

1

MyPhoneCall.javaBroadcastReceiver。它不是Activity。但在您的AndroidManifest.xml中,您已將其聲明爲Activity。因此您收到ClassCastException