Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何向具有自定义权限的其他应用发送OrderedBroadcast?_Android_Permissions_Broadcastreceiver_Broadcast - Fatal编程技术网

Android 如何向具有自定义权限的其他应用发送OrderedBroadcast?

Android 如何向具有自定义权限的其他应用发送OrderedBroadcast?,android,permissions,broadcastreceiver,broadcast,Android,Permissions,Broadcastreceiver,Broadcast,我的要求是,从一个应用程序我想通知另一个应用程序一些事件的广播,但我不希望其他应用程序也收到广播。因此,我认为有权限的sendOrderedBroadcast是一个很好的解决方案 然后我的测试如下所示: BCSender应用程序:将定义自定义权限,并使用此权限发送广播: <permission android:protectionLevel="normal" android:name="com.czou.permission.BC" /> BCReceiverA

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

然后我的测试如下所示:

BCSender应用程序:将定义自定义权限,并使用此权限发送广播:

<permission 
    android:protectionLevel="normal"
    android:name="com.czou.permission.BC" />
BCReceiverA应用程序:将声明BCSender应用程序中定义的权限并注册广播接收器:

<user-permission android:name="com.czou.permission.BC" />
您可以发现,在BCSender中,我使用sendOrderedBroadcastintent,BC_权限,结果是BCReceiverA无法接收广播,也不能使用sendBroadcastintent,BC_权限。但如果我使用sendBroadcastintent,接收者可以得到它

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

您有。元素名称应该是

此外,您可能希望在两个应用程序中声明元素,因此它们的安装顺序并不重要。否则,必须先安装应用程序,然后再安装应用程序。

您已经安装了。元素名称应该是


此外,您可能希望在两个应用程序中声明元素,因此它们的安装顺序并不重要。否则,必须在安装应用程序之前安装应用程序。

谢谢你发现我的错误。@posaidong能否请你发布这两个应用程序的清单文件。这将是一个帮助。@posaidong你能解释一下你是如何调用另一个应用程序的吗?请给我解释一下sendBroadcast的方法。@SanghatiMukherjee我不是从一个应用程序调用另一个应用程序,我只是想发送广播来通知另一个应用程序。如您所见,我已经发布了部分清单:sender定义权限:com.czou.permission.BC;和接收者声明许可:com.czou.permission.BC。就这样。谢谢你抓住我的错误。@posaidong你能把你的两个申请的清单文件都寄出去吗。这将是一个帮助。@posaidong你能解释一下你是如何调用另一个应用程序的吗?请给我解释一下sendBroadcast的方法。@SanghatiMukherjee我不是从一个应用程序调用另一个应用程序,我只是想发送广播来通知另一个应用程序。如您所见,我已经发布了部分清单:sender定义权限:com.czou.permission.BC;和接收者声明许可:com.czou.permission.BC。就这样。
<user-permission android:name="com.czou.permission.BC" />
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);     
    }    
}