2013-02-18 29 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