Android静态广播接收不到(app之间数据传递)

在工作中,接收其它应用程序数据时,静态注册了广播,可是却接收不到消息,很是郁闷,经过看书,查阅资料,最终解决了问题,问题出在action的配置上(这个action的配置如果是低于4级是接收不到广播的,这里是个坑 com.x.x.x 。之前配置3级,就怎么都接收不到广播)。
需求是:两个应用程序工程名称分别是:Demo2_broadcastReceiver,Demo1_intent 。
Demo2_broadcastReceiver这个工程通过发广播的方式给工程Demo1_intent传递数据,
Demo1_intent工程接收到数据之后,返回一些数据给工程Demo2_broadcastReceiver 。

Demo2_broadcastReceiver工程代码如下:

package com.ymt.demo2_broadcastreceiver;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

/**
 * 调用者 
 * 
 * @author user
 *点击按钮时发送广播给Demo1_intent工程
 */

public class MainActivity extends Activity {


    private String datas="你好,我是调用者,mainApp.会返回给你数据,请查收!!!";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClick(View view) {
    //intent后面的参数是和接收者manifest.xml配置文件中广播的<intent-filter>中的<action/>相匹配的
        Intent broadcast = new Intent("com.ybs.send.demo_ybs_broadcastreceiver");
        broadcast.putExtra("mainApp_send_data", datas);
        sendBroadcast(broadcast);
    }
}
package com.ymt.demo2_broadcastreceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
//接收到被调用者返回的数据
public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("tag", "otherApp广播接收者,这是调用者,接收ybs返回的数据!!!");

        if("com.ybs.return.data.action".equals(intent.getAction())){
            Log.i("tag", "接收到ybs返回数据的广播!!!action=="+intent.getAction());
            String data=intent.getStringExtra("return_data");
            Log.i("tag", "这是ybs返回给调用者的数据=="+data);
        }



    }
}

Android manifest.xml配置文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ymt.demo2_broadcastreceiver"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".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=".MyReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
             <!-- 这个action的配置如果是低于4级是接收不到广播的,这里是个坑 com.x.x.x 之前配置3级,就怎么都接收不到广播-->
                <action android:name="com.ybs.return.data.action"/>                  

            </intent-filter>
        </receiver>
    </application>

</manifest>

Demo1_intent工程代码如下:

package com.ybs.ymt;

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


public class MyReceiver extends BroadcastReceiver {
    private String return_caller_data;
    private String parser_caller_data;
    public MyReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("tag", "接收到调用者的数据");
        if("com.ybs.send.demo_ybs_broadcastreceiver".equals(intent.getAction())){
            Log.i("tag", "接收到调用者的action=="+intent.getAction());
            String mainData=intent.getStringExtra("mainApp_send_data");

            Log.i("tag", "接收到调用者的data=="+ parserCallerData(mainData));


            //接收到调用者的广播,回复调用者数据
            Intent return_data_intent=new Intent("com.ybs.return.data.action");
            return_data_intent.putExtra("return_data", returnCallerData());
            context.sendBroadcast(return_data_intent);
        }

    }

    //解析调用者传过来的数据
    private String parserCallerData(String param){
        parser_caller_data=param;
        return parser_caller_data;
    }

    //返回给调用者数据。
    private String returnCallerData(){
        return_caller_data="我是被调用者,返回给调用者数据,ybsybsybs。";
        return return_caller_data;
    }

}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ybs.ymt"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Light.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true" >
            <!-- 这个action的配置如果是低于4级是接收不到广播的,这里是个坑 com.x.x.x 之前配置3级,就怎么都接收不到广播-->
            <intent-filter>
                <action android:name="com.ybs.send.demo_ybs_broadcastreceiver"></action>
            </intent-filter>
        </receiver>
    </application>

</manifest>
Androidapp广播接收器是指在Android系统中,一个应用程序可以发送广播,而另一个应用程序可以注册并接收广播。 实现跨app广播接收器需要以下步骤: 1. 发送广播:在发送广播应用程序中,需要创建一个Intent对象,并使用setAction()方法为其设置一个自定义的Action,用于标识该广播。然后,使用sendBroadcast()方法发送广播。例如: ```java Intent intent = new Intent(); intent.setAction("com.example.MY_CUSTOM_ACTION"); sendBroadcast(intent); ``` 2. 注册接收器:在接收广播应用程序中,需要创建一个BroadcastReceiver对象,并使用IntentFilter对象来过滤想要接收广播。然后,使用registerReceiver()方法注册该广播接收器。例如: ```java BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 处理接收到的广播 } }; IntentFilter filter = new IntentFilter(); filter.addAction("com.example.MY_CUSTOM_ACTION"); registerReceiver(receiver, filter); ``` 在注册广播接收器时,需要注意在AndroidManifest.xml文件中声明接收器的权限,以便允许不同应用程序之间广播通信。 需要注意的是,发送广播接收广播应用程序应该在同一个设备上安装和运行,并且具有相应的权限。否则,跨app广播接收器可能无法正常工作。 总之,跨app广播接收器是Android为了实现不同应用程序之间的通信而提供的一种机制,使应用程序能够发送广播并让其他应用程序接收并处理该广播
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值