真机接收不到系统有关通话状态的广播 android广播 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先确定有这两个权限: <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>再确定BroadcastReceiver有没有注册上。android.intent.action.PHONE_STATE不是有序广播,如果上面两条没问题,应该是可以接受到的。android.intent.action.NEW_OUTGOING_CALL是有序广播,如果怀疑被其他应用abort了的话,就把你的BroadcastReceiver设置一个比较高的优先级,试试能不能接收到。 权限都加了的,我是在AndroidManifest.xml注册的,注册应该没问题,但是还是没有接收到android.intent.action.PHONE_STATE这个广播,优先级的话我有常识过Integer.MAXVALUE,结果还是接收不到 优先级只对有序广播有用。能收到android.intent.action.NEW_OUTGOING_CALL这个广播吗? 两个都收不到,一个广播Broadcas接收两个action的设置应该没问题吧? 我是直接在AndroidManifest.xml注册的<receiver android:name="com.test.servicedemo.MyReceiver" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver>虚拟机测试通过,真机失败 你这个应用是不是没有Activity?4.0以后对这个情况是有限制的,一个APK中如果没有Activity,只有Receiver或Service,Service或Receiver都是不会启动的,也就收不到广播。这种限制是为了防止一些流氓软件在后台乱来。 是的,但是我设置Activity的时候也接收不到。 是的,但是我设置Activity的时候也接收不到。Activity启动以后能收到广播吗? 如果Activity从来没启动过,也是收不到广播的。除非是系统应用。 你广播不是在Manifest里注册的么 你广播不是在Manifest里注册的么我是想在Manifest里面注册。后面发现不行,于是我就两种方式都测试了,都没有效果。 你广播不是在Manifest里注册的么我是想在Manifest里面注册。后面发现不行,于是我就两种方式都测试了,都没有效果。广播还是放在Manifest里面注册。然后你的应用要有个Activity,开机后你运行一下这个Activity。之后就一直能收到广播了。 你广播不是在Manifest里注册的么我是想在Manifest里面注册。后面发现不行,于是我就两种方式都测试了,都没有效果。广播还是放在Manifest里面注册。然后你的应用要有个Activity,开机后你运行一下这个Activity。之后就一直能收到广播了。好吧,还是没有效果 我试了,是可以的。代码贴给你参考一下。广播接收器:package com.example.boot;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.intent.action.PHONE_STATE")){ Log.e("boot", "boot ------ android.intent.action.PHONE_STATE"); } else if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")){ Log.e("boot", "boot ------ android.intent.action.NEW_OUTGOING_CALL"); } }}Activity,只要启动一次就好了:package com.example.boot;import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; }}Manifest:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.boot" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" > </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" > </uses-permission> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.boot.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="BootReceiver" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver> </application></manifest>打印的log: 在真机上测试通过的,不需要重启,只要装上以后启动一下Activity就可以了。 在真机上测试通过的,不需要重启,只要装上以后启动一下Activity就可以了。好吧 机型问题。 你什么机子测试的? 在真机上测试通过的,不需要重启,只要装上以后启动一下Activity就可以了。好吧 机型问题。 你什么机子测试的?MTK和全志的都试过 在真机上测试通过的,不需要重启,只要装上以后启动一下Activity就可以了。好吧 机型问题。 你什么机子测试的?MTK和全志的都试过我的小米 没过 获取手机上的所有短信 android实现RTP和SIP协议 望大牛帮小白分析一下OutOfResourcesException locking surface adnroid上如何访问url返回数据,特殊!! 请问图片中的ListView的时间文本怎么用代码显示,和箭头图标用代码怎么设计,谢谢!!! 请前辈指教 请教如何将文件打包进android安装包的/data文件夹下 请教下文件选择的问题 如何将一个window的指定区域的透明度设为0.0f 中文版的API大家谁有,能否分享一个? WebView 设置特定字体缩放比例 求助gridview里item中的imageview高度问题
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>
再确定BroadcastReceiver有没有注册上。
android.intent.action.PHONE_STATE不是有序广播,如果上面两条没问题,应该是可以接受到的。
android.intent.action.NEW_OUTGOING_CALL是有序广播,如果怀疑被其他应用abort了的话,就把你的BroadcastReceiver设置一个比较高的优先级,试试能不能接收到。
能收到android.intent.action.NEW_OUTGOING_CALL这个广播吗?
<receiver android:name="com.test.servicedemo.MyReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
虚拟机测试通过,真机失败
4.0以后对这个情况是有限制的,一个APK中如果没有Activity,只有Receiver或Service,Service或Receiver都是不会启动的,也就收不到广播。
这种限制是为了防止一些流氓软件在后台乱来。
Activity启动以后能收到广播吗?
广播还是放在Manifest里面注册。然后你的应用要有个Activity,开机后你运行一下这个Activity。之后就一直能收到广播了。
广播还是放在Manifest里面注册。然后你的应用要有个Activity,开机后你运行一下这个Activity。之后就一直能收到广播了。好吧,还是没有效果
广播接收器:
package com.example.boot;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;public class BootReceiver extends BroadcastReceiver { @Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.intent.action.PHONE_STATE")){
Log.e("boot", "boot ------ android.intent.action.PHONE_STATE");
} else if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")){
Log.e("boot", "boot ------ android.intent.action.NEW_OUTGOING_CALL");
}
}}
Activity,只要启动一次就好了:package com.example.boot;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}}
Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.boot"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" >
</uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" >
</uses-permission> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.boot.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> <receiver android:name="BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
</application></manifest>打印的log:
MTK和全志的都试过
MTK和全志的都试过我的小米 没过