【问题标题】:How to sendOrderedBroadcast to other APP with custom permission?自定义权限如何发送OrderedBroadcast到其他APP?
【发布时间】:2013-03-29 07:17:57
【问题描述】:

我的要求是,我想从一个应用程序通过广播通知另一个应用程序一些事件,但我不希望其他应用程序也收到广播。所以我认为有权限的 sendOrderedBroadcast 是一个很好的解决方案。

那么我的测试是这样的:

BCSender APP:
定义一个自定义权限,并使用此权限发送广播:

<permission 
    android:protectionLevel="normal"
    android:name="com.czou.permission.BC" />

BCSender 中唯一的活动:

package com.example.bcsender;

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

public class MainActivity extends Activity {

    private static String BC_PERMISSION = "com.czou.permission.BC";

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

        sendBroadcast();
    }

    @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;
    }

    private void sendBroadcast()
    {
        Intent intent = new Intent("android.intent.action.czou_broadcast");
        intent.putExtra("msg", "hello from czou");
        sendOrderedBroadcast(intent, BC_PERMISSION);
        //sendBroadcast(intent, BC_PERMISSION);
    }    
}


BCReceiverA APP:
它将声明BCSender APP中定义的权限并注册广播接收器:

<user-permission android:name="com.czou.permission.BC" />

BCReceiverA 中唯一的活动:

package com.example.bcreceivera;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity {        
    private static String TAG = "BCReceiverA";

    private BroadcastReceiver mReceiver = null;

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

        registerReceiver();
    }

    @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;
    }

    @Override
    public void onDestroy()
    {
        super.onDestroy();

        unregisterReceiver();
    }

    private void registerReceiver()
    {
        android.util.Log.d(TAG, "register receiver.");
        mReceiver = new BroadcastReceiver() 
        {
            @Override
            public void onReceive(Context context, Intent intent)
            {
                String msg = intent.getStringExtra("msg");
                android.util.Log.d(TAG, "Receive broadcast. " + msg);

                Bundle bundle = new Bundle();
                bundle.putString("msg", msg + "pass through ReceverA");
                setResultExtras(bundle);
                abortBroadcast();
            }
        };

        IntentFilter intentFilter = new IntentFilter("android.intent.action.czou_broadcast");
        intentFilter.setPriority(1000);
        this.registerReceiver(mReceiver, intentFilter);


    }

    private void unregisterReceiver()
    {
        android.util.Log.d(TAG, "unregister receiver.");
        this.unregisterReceiver(mReceiver);     
    }    
}


你可以发现,在BCSender中,我使用了sendOrderedBroadcast(intent, BC_PERMISSION),结果是BCReceiverA收不到广播,sendBroadcast(intent, BC_PERMISSION)也收不到。但是如果我使用sendBroadcast(intent),接收者可以得到它。

那么这里的sendBroadcast()/sendOrderedBroadcast() 有什么问题?

【问题讨论】:

    标签: android permissions broadcastreceiver broadcast


    【解决方案1】:

    你有&lt;user-permission&gt;。元素名称应该是&lt;uses-permission&gt;

    另外,您可能希望在两个应用程序中声明&lt;permission&gt; 元素,因此它们的安装顺序无关紧要。否则,&lt;permission&gt; 应用必须安装在&lt;uses-permission&gt; 应用之前

    【讨论】:

    • 感谢您发现我的错误。
    • @posaidong 能否请您发布两个应用程序的清单文件。这将是一个帮助。
    • @posaidong 你能解释一下你是如何调用另一个应用程序的吗?请解释一下 sendBroadcast() 方法。
    • @SanghatiMukherjee 我不从应用程序调用另一个应用程序,我只想发送广播以通知另一个应用程序。如您所见,我已经发布了清单的一部分:发件人定义权限:“com.czou.permission.BC”;和接收者声明许可:“com.czou.permission.BC”。就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2013-04-21
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    相关资源
    最近更新 更多