简体   繁体   English

动态广播接收器未注册

[英]Dynamic Broadcast Receiver Not registering

I have registered broadcast receiver statically and it's working perfectly fine. 我已经静态注册了广播接收器,并且工作正常。 But I have to register it dynamically as my activity is to receive data from a broadcast receiver. 但是我必须动态注册它,因为我的活动是从广播接收器接收数据。

MyReceiver.java MyReceiver.java

public class MyReceiver extends BroadcastReceiver {

    String TAG = "MyReceiver:";

    @Override
    public void onReceive(Context ctx, Intent intent) {

        if(intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)){
            Uri data = intent.getData();
            String packageName = intent.getData().getSchemeSpecificPart();
            Log.d(TAG, "Action: " + intent.getAction());
            Log.d(TAG, "The DATA Now: " + data);
            Log.d(TAG, "The Name Now: " + packageName);

            Intent i = new Intent(ctx, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.putExtra("message", packageName);
            Log.d(TAG,"Starting list act");
            ctx.startActivity(i);
        }
    }
}

MainActivity.java MainActivity.java

public class MainActivity extends Activity {

    MyReceiver receiver;
    IntentFilter intent;

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

        receiver = new MyReceiver();
        intent = new IntentFilter(); 
        intent.addAction("android.intent.action.PACKAGE_ADDED");
        this.registerReceiver(receiver, intent);
        Log.v("calling Dynamic Broadcast()", "MainActivity");

        Intent intent = getIntent();
        String message1 = intent.getStringExtra("message");

        Log.v("Back From Rcver:", "added pkg is: " + message1);
    }
}

Here is the log: 这是日志:

01-19 11:48:36.372: V/calling Dynamic Broadcast()(3053): MainActivity

I am unable to get package_add logs from MyReceiver class once package is added. 添加包后,我无法从MyReceiver类获取package_add日志。 What I am doing wrong? 我做错了什么?

Any help would be really appreciated. 任何帮助将非常感激。

The important thing is not to forget about data scheme in the intent filter: 重要的是不要忘记意图过滤器中的数据方案:

IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
filter.addDataScheme("package");
mContext.registerReceiver(mReceiver, filter);

A simple mistake you done at 您在做的一个简单错误

intent.addAction("android.intent.action.PACKAGE_REMOVED");

you have registered only package removed action in IntentFilter 您已在IntentFilter注册仅软件包删除操作

its something like this... 它是这样的...

intent.addAction(Intent.ACTION_PACKAGE_ADDED);
intent.addAction(Intent.ACTION_PACKAGE_REMOVED);

EDIT: 编辑:

still there is typo mistake in your code. 您的代码中仍然存在拼写错误。

intent.addAction("android.intent.action.PACKAGE_ADD");

should be 应该

intent.addAction("android.intent.action.PACKAGE_ADDED"); // last two characters ED are missing

use predifined Constant Strings of Intent to avoid typo mistake... 使用预定义的Intent常量字符串来避免输入错误...

intent.addAction(Intent.ACTION_PACKAGE_ADDED);

尝试将默认类别添加到您的IntentFilter:

filter.addCategory(Intent.CATEGORY_DEFAULT);

This is my personal suggestion don't add dynamic broadcast receiver onReceive in broadcast file. 这是我的个人建议,不要在广播文件中添加动态广播接收器onReceive。 Add it on first activity or main activity of your application. 将其添加到应用程序的第一个活动或主要活动中。 If you needed it only when your application is open. 如果仅在打开应用程序时需要它。 But if you need it always received response just added it on manifest file 但是,如果需要,它总是会收到响应,只需将其添加到清单文件中

Register dynamic broadcast receiver on main activity 在主要活动中注册动态广播接收器

MyReceiver reciver;

@Override
protected void onResume() {
    super.onResume();
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
    reciver = new MyReceiver();
    registerReceiver(reciver, intentFilter);
}

Unregister that broadcast receiver on activity stop or closed 在活动停止或关闭时注销该广播接收器

@Override
protected void onStop() {
    super.onStop();
    unregisterReceiver(reciver);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM