用于从广播接收器

时间:2016-06-26 12:16:26

标签: java android

我在非活动类中有一个函数ReadConfig,它由Service调用。此函数使用IntentService从文件中读取数据。

非活动类中的功能

//Start of globalVariables
public static boolean received;
public static String actionID = "ACTION_ID";
public static ArrayList<String> configData;
public static BroadcastReceiver configDataReceiver;
//End of globalVariables

public static List<String> ReadConfig(Context context, String configFileName)
{
    configDataReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context arg0, Intent intent)
        {
            if(intent.getAction().equals(actionID))
            {
                configData = intent.getStringArrayListExtra("CONFIGDATA");
                received = true;
            }
        }
    };
    LocalBroadcastManager.getInstance(context)
            .registerReceiver(configDataReceiver,new IntentFilter(actionID));
    Intent workRequest = new Intent(context,IOConfigurations.class);
    workRequest.putExtra("OPERATION","READ");
    workRequest.putExtra("FILENAME",configFileName);
    //Calling intentservice
    context.startService(workRequest);

    //Wait for broadcast receiver to get data and assign to global variables
    while (!received)
    {
        try
        {
            Thread.sleep(1000);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }

    LocalBroadcastManager.getInstance(context).unregisterReceiver(configDataReceiver);
    return configData;
}

意向服务

    Intent configData = new Intent(actionID);
    configData.putStringArrayListExtra("CONFIGDATA",FileOperations.readFile(fileName));
    LocalBroadcastManager.getInstance(this).sendBroadcast(configData);

意图服务被调用并广播数据但是接收器却没有从广播管理器接收任何数据,而while循环一直持续。

1 个答案:

答案 0 :(得分:0)

检查我的评论

    public static List<String> ReadConfig(Context context, String configFileName)
{
    configDataReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context arg0, Intent intent)
        {
            if(intent.getAction().equals(actionID))
            {
                configData = intent.getStringArrayListExtra("CONFIGDATA");
                received = true;
            }
        }
    };
    LocalBroadcastManager.getInstance(context)
            .registerReceiver(configDataReceiver,new IntentFilter(actionID));
    Intent workRequest = new Intent(context,IOConfigurations.class);
    workRequest.putExtra("OPERATION","READ");
    workRequest.putExtra("FILENAME",configFileName);
    //Calling intentservice
    context.startService(workRequest);

    //Wait for broadcast receiver to get data and assign to global variables
    while (!received)
    {
        try
        {
            Thread.sleep(1000);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }

   // Why here your unregistering the broacast listener, 
// Your registering and unregistering in same call, unregiter when your work is done        

LocalBroadcastManager.getInstance(context).unregisterReceiver(configDataReceiver);
    return configData;
}