我想在我的
Android应用中使用
sendOrderedBroadcast.
我希望能够将Intent从我的一个应用程序发送到另一个应用程序,然后我想从收到Intent的应用程序中获取数据,在这种情况下为布尔值true或false.
这是当前的代码:
Intent i = new Intent(); i.setAction(globalData.PROPOSE_IN_DOMAIN_ROAM_INTENT); i.putExtra("com.testnetworks.QCLEVEL",aproposedTheoreticalQoSLevel); sendOrderedbroadcast(i,null,Activity.RESULT_OK,null);
这是实现我想要的正确方法吗?
如果是这样,我将什么用作resultReceiver *参数? (第3个参数)
然后我如何从广播中收回数据?
我做了一个快速的谷歌,没有提出任何例子,任何帮助或例子非常感谢.
更新的代码:
sendOrderedbroadcast(i,domainbroadcast,null);
class Domainbroadcast extends broadcastReceiver{ @Override public void onReceive(Context arg0,Intent intent) { String action = intent.getAction(); if(globalData.PROPOSE_IN_DOMAIN_ROAM_INTENT.equals(action)){ Log.d("broADCAST","Returning broadcast"); Bundle b = intent.getExtras(); Log.d("broADCAST","Returning broadcast " + b.getInt("com.testnetworks.INT_TEST")); } }
@Override public void onReceive(Context context,Intent intent) { String action = intent.getAction(); if(globalData.PROPOSE_IN_DOMAIN_ROAM_INTENT.equals(action)){ Bundle b = intent.getExtras(); int testQCLevel = b.getInt("com.testnetworks.QCLEVEL"); switch(testQCLevel){ case 1: Log.d("QCLevel ","QCLevel = UNAVAILABLE"); break; case 2: Log.d("QCLevel ","QCLevel = BELOWUSABILITY"); break; case 3: Log.d("QCLevel ","QCLevel = VOICE"); break; } intent.putExtra("com.testnetworks.INT_TEST",100); }
所以根据Doc的说法,我应该在我的Domainbroadcast接收器中收到100,但它总是回到0.
谁能明白为什么?
** resultReceiver – 您自己的broadcastReceiver将其视为广播的最终接收者.*
解决方法
您需要
get the extra data results Bundle并将数据添加到其中.
尝试这样的事情:
public class DemoOrderedbroadcast extends Activity { private static String SOMETHING_HAPPENED = "com.example.somethinghappened"; private static String EXTRA_INTEGER = "extra integer"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); IntentFilter filter = new IntentFilter(SOMETHING_HAPPENED); registerReceiver(new broadcastReceiver() { @Override public void onReceive(Context context,Intent intent) { Bundle results = getResultExtras(true); results.putInt(EXTRA_INTEGER,100); Log.d("DemoOrderedbroadcast","In Initial Receiver: Put 'extra integer' = 100"); } },filter); Intent intent = new Intent(SOMETHING_HAPPENED); sendOrderedbroadcast(intent,new broadcastReceiver() { @Override public void onReceive(Context context,Intent intent) { Bundle results = getResultExtras(true); Log.d("DemoOrderedbroadcast","In Result Receiver: Got 'extra integer' = " + results.getInt(EXTRA_INTEGER,-1)); } },null); } }
这产生了所需的输出:
$adb -e shell am start -n com.example.DemoOrderedbroadcast/.DemoOrderedbroadcast Starting: Intent { cmp=com.example.DemoOrderedbroadcast/.DemoOrderedbroadcast } $adb -e shell logcat | grep D/DemoOrderedbroadcast D/DemoOrderedbroadcast( 1343): In Initial Receiver: Put 'extra integer' = 100 D/DemoOrderedbroadcast( 1343): In Result Receiver: Got 'extra integer' = 100
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。