Android BroadCastReceiver无法使用自定义操作

时间:2017-09-19 16:05:11

标签: android broadcastreceiver

我正在尝试使用自定义操作实现一个简单的BroadCastReceiver,该操作在接收器的onReceive()方法中弹出一个toast,但是由于一些神秘的原因它不起作用!!

主活动只有一个按钮,可在单击时广播意图。 我不确定命名动作是否有问题。 任何帮助将不胜感激。

MainActivity:

   package com.example.tsupt.bcr;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
    public void broadcastIntent(View view){
        Intent intent = new Intent();
        intent.setAction("com.example.tsupt.bcr.CUSTOM_INTENT");
        sendBroadcast(intent);
    }

}

广播接收器:

public class BR extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"It worked",Toast.LENGTH_LONG).show();
        System.out.println("It worked");

}}

清单:

   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tsupt.bcr">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <receiver android:name="com.example.tsupt.bcr.BR">
                <intent-filter>
                    <action android:name="com.example.tsupt.bcr.CUSTOM_INTENT">
                    </action>
                </intent-filter>

            </receiver>
        </activity>

    </application>

</manifest>

布局文件中的按钮:

<Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:onClick="broadcastIntent"
        tools:layout_constraintTop_creator="1"
        tools:layout_constraintRight_creator="1"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginTop="180dp"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        tools:layout_constraintLeft_creator="1"
        app:layout_constraintLeft_toLeftOf="parent" />

2 个答案:

答案 0 :(得分:0)

在您的清单中,<receiver>元素应该是<activity>元素的兄弟,而不是孩子:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tsupt.bcr">

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver android:name="com.example.tsupt.bcr.BR">
        <intent-filter>
            <action android:name="com.example.tsupt.bcr.CUSTOM_INTENT">
            </action>
        </intent-filter>

    </receiver>

</application>

</manifest>

答案 1 :(得分:0)

实际上它毕竟有效。 问题似乎与我的华为荣誉5倍,我正在测试我的应用程序。 华为手机使用这种节省电池的方式,看起来就像是问题的根源。