BroadcastReceiver中的Android onReceive无法正常工作

时间:2016-01-19 07:00:50

标签: android broadcast

我在安装应用时添加了一个接收器来监听。但它没有用。这是AndroidManifest.xml中的代码

 <receiver android:enabled="true" 
   android:exported="true"
   android:name="com.bsp.iqtest.reiceiver.IQTestReceiver">
   <intent-filter>

     <action android:name="android.intent.action.PACKAGE_ADDED" />
     <action android:name="android.intent.action.PACKAGE_REPLACED" />
     <data android:scheme="package"/>
   </intent-filter>
</receiver>

这是我在MainActivity(启动器活动)中的代码,函数onCreate。

protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   IQTestReceiver br = new IQTestReceiver();
   IntentFilter intentFilter = new IntentFilter();
   intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
   intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
   intentFilter.addDataScheme("package");
   registerReceiver(br, intentFilter);
}

这是我在IQTestReceiver中的代码(此类用其他文件编写)

public class IQTestReceiver extends BroadcastReceiver {
  public IQTestReceiver() {
  }
  @Override
  public void onReceive(Context context, Intent intent) {
    String packageName=intent.getData().getEncodedSchemeSpecificPart();
    Log.e("HELLO",packageName);
  }
}

我在onReceive函数中设置了一个断点,但是在调试时它没有运行。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果您正在尝试使用自己的应用,则

}或PACKAGE_ADDED

“广播操作:设备上已安装新的应用程序包。数据包含软件包的名称。请注意,新安装的软件包不接收此广播。”

请参阅http://developer.android.com/reference/android/content/Intent.html

答案 1 :(得分:0)

将您的广播设置为清单

 <receiver
            android:name=".IQTestReceiver"
            android:exported="true"
            android:enabled="true">

            <intent-filter>
                <action android:name="check_values"/>

            </intent-filter>

        </receiver>

并像这样发送广播..... Intent it1=new Intent(Intent.ACTION_USER_PRESENT); it1.setAction("check_values"); it1.putExtra("data_key1",message); sendBroadcast(it1);

并且接收就像这样......

  @Override
        public void onReceive(Context context, Intent intent)
        {
           data1=intent.getStringExtra("data_key1");
           System.out.println("ffffff11" + data1);
      }