2013-02-18 27 views
0

我正在嘗試在應用程序上創建。我需要檢測我是否接到任何電話,然後獲取號碼,但是這個過程應該在後臺進行。
後臺工作是後期工作,但現在我正在嘗試啓動我的應用程序,但它崩潰了。
你能告訴我如何在背景中調用broadcastreciver嗎? 這裏是我的MainActivity.java如何檢測後臺來電

public class MainActivity extends Activity 
{ 
@Override 
public void onCreate(Bundle savedInstancestate) 
{ 
    super.onCreate(savedInstancestate); 
    setContentView(R.layout.activity_main); 

} 
public void broadcastIntent(View view) 
{ 
     Intent intent = new Intent(); 
    intent.setAction("com.app.callrecord.MyBroadcastReceiver"); 
    sendBroadcast(intent); 
} 
} 

Broadcastreceiver.java

public class MyBroadcastReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Bundle bundle = intent.getExtras(); 
    if (bundle == null) 
     return; 
    String phoneNumber = null; 

    // Incoming call 
    String state = bundle.getString(TelephonyManager.EXTRA_STATE); 
    if ((state != null) && (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))) { 
     phoneNumber = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
     // callToast(phoneNumber); 

    } 
    // Outgoing call 
    else if (state == null) {   
     Intent i = new Intent(context,RecordHistory.class); 
     intent.putExtra("phonenumber", phoneNumber); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
     // Here: do something with the number 
    } 
} 
} 

這裏是我的清單文件

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <receiver android:name="com.app.callrecord.MainActivity"> 
<intent-filter> 
    <action android:name="android.intent.action.PHONE_STATE"></action> 
    <action android:name="android.intent.action.NEW_OUTGOING_CALL"></action> 
</intent-filter> 

 <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

而且這裏是我的例外日誌

02-18 13:36:17.240: E/AndroidRuntime(9397): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.app.callrecord/com.app.callrecord.MyBroadCastReciever}: java.lang.ClassNotFoundException: com.app.callrecord.MyBroadCastReciever 
02-18 13:36:17.240: E/AndroidRuntime(9397): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
02-18 13:36:17.240: E/AndroidRuntime(9397): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2278) 
02-18 13:36:17.240: E/AndroidRuntime(9397): at android.app.ActivityThread.access$600(ActivityThread.java:142) 
02-18 13:36:17.240: E/AndroidRuntime(9397):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280) 

給我任何參考。

回答

2

您的清單中有一個錯誤。下面一行錯誤地指活動:

<receiver android:name="com.app.callrecord.MainActivity"> 

它應該是指接收器:

<receiver android:name="SOME_PACKAGE_HERE.MyBroadcastReceiver"> 

編輯:

如果廣播接收器不會被調用,你可能穿上」沒有權限檢測來電和去電。您需要清單中的android.permission.READ_PHONE_STATEandroid.permission.PROCESS_OUTGOING_CALLS權限。

+0

謝謝您的回答,但是當我啓動的應用程序可以在我的手機打電話我沒拿到,我用它來顯示號碼的任何祝酒。 .. – 2013-02-18 08:22:45

+0

這可能是由於缺少權限。我編輯了答案。 – Tomik 2013-02-18 08:49:08

1

我認爲問題在於您在清單中聲明瞭錯誤的名稱。你已經宣佈它作爲

<receiver android:name="com.app.callrecord.MainActivity"> 

,而應該是

<receiver android:name="com.app.callrecord.MyBroadCastReciever"> 
+0

感謝您的回答,但當我啓動的應用程序可以打電話給我的手機,我沒有得到任何烤麪包,我用來顯示數字... – 2013-02-18 08:23:48

+0

'callToast(phoneNumber)'部分似乎註釋掉。這可能是原因。 – 2013-02-18 08:29:29