【问题标题】:android : not getting new outgoing call broadcastandroid:没有收到新的拨出电话广播
【发布时间】:2012-06-24 06:22:08
【问题描述】:

我已经为 NEW_OUTGOING_CALL 广播定义了一个接收器。但这并没有被调用。

在我的应用程序中,我有其他广播接收器 (电话状态,包更改)及其全部被调用。

请在下面查看我的 android 清单 我还尝试更改接收器的定义顺序(将它们放在活动之前等)。

ma​​nifest.xml

<uses-sdk android:minSdkVersion="8" />
<!-- permissions -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Features -->
<!-- <uses-feature android:name="android.hardware.telephony" /> -->
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >

    <!-- Activities -->
    <activity
        android:name=".activities.LoginActivity"
        android:screenOrientation="portrait" >
    </activity>
    <activity android:name=".activites.helper.ShowPopUp" >
    </activity>
    <activity
        android:name=".activities.InnerWindowActivity"
        android:noHistory="true"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Black.NoTitleBar" >
    </activity>
    <activity
        android:name=".activities.VaultDetailSmsActivity"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Black.NoTitleBar" >
    </activity>
    <activity android:name=".activities.LocationActivity" >
    </activity>
    <activity android:name=".activities.VaultSettingsActivity" >
    </activity>
    <!-- Receivers -->
    <receiver android:name=".listeners.OutgoingCallReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" >
            </action>
        </intent-filter>
    </receiver>
    <receiver android:name=".listeners.PackageChangeReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_REPLACED" />
            <action android:name="android.intent.action.PACKAGE_REMOVED" />

            <data android:scheme="package" />
        </intent-filter>
    </receiver>
    <receiver android:name=".listeners.PhoneStateBroadcastReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" >
            </action>
        </intent-filter>
    </receiver>
    <receiver
        android:name=".listeners.VaultSmsBroadcastReceiver"
        android:exported="true" >
        <intent-filter android:priority="999" >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
        <!--
             <intent-filter android:priority="101">
                <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />

                <data android:mimeType="application/vnd.wap.mms-message" />
            </intent-filter>

            <intent-filter android:priority="101">
                <action android:name="com.android.mms.transaction.MESSAGE_SENT" />
            </intent-filter>
        -->
    </receiver>
    <!-- Services -->
    <service android:name=".services.CallLogContentObserverService" >
    </service>
    <service android:name=".services.SentSmsContentObserverService" >
    </service>
    <service android:name=".services.LocationService" >
    </service>
</application>

OutgoingCallReceiver.java

 package com.idg.idvault.listeners;


 import com.idg.idvault.activities.IDVaultActivity;

 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.util.Log;
 import android.widget.Toast;

 public class OutgoingCallReceiver extends BroadcastReceiver {


     @Override
     public void onReceive(Context context, Intent intent) {

         final String originalNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

         this.setResultData("0123456789");

         final String newNumber = this.getResultData();

         String msg = "Intercepted outgoing call. Old number " + originalNumber + ", new number " + newNumber;

         Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
         Log.i("OutgoingCallInterceptor", "OutgoingCallInterceptor");
         if (originalNumber.equals("**434*")) {
             setResultData(null);

             Intent intent1 = new Intent(context, IDVaultActivity.class);
             intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             context.startActivity(intent1);
         }


     }

 }

【问题讨论】:

  • 我在发布问题后很快得到了答案。我应该添加权限 。谢谢

标签: android broadcastreceiver call


【解决方案1】:

在manifest.xml中添加&lt;uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/&gt;处理呼出的权限

【讨论】:

  • 似乎有很多三星手机没有广播这个的情况,但不是所有的三星手机,所以你的里程可能会有所不同。
  • 这在模拟器上对我不起作用。有人有同样的问题吗?
【解决方案2】:

检查这个。清单文件中的顺序可能存在问题。 https://stackoverflow.com/a/6707482/1403112

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多