2013-02-18 2 views
0

Я пытаюсь создать приложение. Мне нужно определить, есть ли у меня вызов, а затем получить номер, но этот процесс должен происходить в фоновом режиме.
Фоновая работа - последняя часть, но теперь я пытаюсь запустить свое приложение, но оно рушится.
Можете ли вы также рассказать мне, как позвонить в службу вещания в backgound? Вот мой 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"> 

Edit:

Если вещательный приемник не дозвонились, вы, вероятно, не» t имеют разрешения для обнаружения входящих и исходящих телефонных звонков. Вам нужны android.permission.READ_PHONE_STATE и android.permission.PROCESS_OUTGOING_CALLS разрешения в вашем манифесте.

+0

Спасибо за ваш ответ, но когда я начала приложение может позвонить на мой телефон я не получил тост, который я использую, чтобы показать номер. .. –

+0

Это может быть связано с отсутствием разрешения. Я отредактировал ответ. – Tomik

1

Я думаю, проблема в том, что вы указали неправильное имя в манифесте. Вы объявили как

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

тогда как он должен быть

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

Спасибо за ваш ответ, но когда я запустил приложение, я могу позвонить на свой телефон, я не получил никакого тоста, который я использую для показа номера ... –

+0

'' callToast (phoneNumber) ', похоже, закомментирован. Это может быть причиной. –

Смежные вопросы