0

SipDemo (voip 受信通話) の一部を次に示します。

public class WalkieTalkieActivity extends Activity {
...
public IncomingCallReceiver callReceiver;
public SipManager manager = null;

@Override
public void onCreate(Bundle savedInstanceState) {

...

     IntentFilter filter = new IntentFilter();
    filter.addAction("android.SipDemo.INCOMING_CALL");
    callReceiver = new IncomingCallReceiver();
    this.registerReceiver(callReceiver, filter);


    initializeManager();
}

public void initializeManager() {
    initializeLocalProfile();
}

public void initializeLocalProfile() {

        SipProfile.Builder builder = new SipProfile.Builder(username, domain);
        builder.setPassword(password);
        me = builder.build();

        Intent i = new Intent();
        i.setAction("android.SipDemo.INCOMING_CALL");
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA);
        manager.open(me, pi, null);

そしてBroadCastReceiver

public class IncomingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SipAudioCall incomingCall = null;
    try {

        SipAudioCall.Listener listener = new SipAudioCall.Listener() {
        };

        WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context;
        incomingCall = wtActivity.manager.takeAudioCall(intent, listener);

        incomingCall.answerCall(30);
    ...

        wtActivity.call = incomingCall;

うまく機能しますが、アプリがバックグラウンドで実行されていても電話を受けられるようにする必要があります。だから私は別の方法でブロードキャストレシーバーを実装しようとしました(アクティビティではなくマニフェストで)。だから削除:

     IntentFilter filter = new IntentFilter();
    filter.addAction("android.SipDemo.INCOMING_CALL");
    callReceiver = new IncomingCallReceiver();
    this.registerReceiver(callReceiver, filter);

マニフェストに追加

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

しかし、今は機能しません。incomingCall は常に null です。

変更前、BroadcastReceiver は

context ==  com.example.android.sip.WalkieTalkieActivity@4051c5e8

そして変更後

context == android.app.ReceiverRestrictedContext@4058ac48

多分これは問題ですが、誰かがそれを修正する方法を知っていますか?

4

1 に答える 1

0

SipProfileアクティビティからサービスに移動する必要があります。その後、 BroadcastReceiveronReceive()はサービスを開始し、サービスに通話を処理させることができます。あなたcontextが入るのonReceive()は短命であり、あなたはそれで特定のことしかできません。

于 2013-01-04T15:58:48.823 に答える