Android BroadCastReceiver tidak berfungsi dengan tindakan khusus

Saya mencoba menerapkan BroadCastReceiver sederhana dengan tindakan khusus yang memunculkan metode onReceive() pada penerima tetapi tidak berfungsi karena beberapa alasan misterius!!

Aktivitas utama hanya memiliki tombol yang menyiarkan maksud ketika diklik. Saya tidak yakin apakah ada masalah dengan penamaan tindakan tersebut. Bantuan apa pun akan dihargai.

Aktifitas utama :

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

}

Penerima siaran:

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");

}}

Manifesnya:

   <?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>

Tombol dari file tata letak:

<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" />

person Tareq Sulaiman    schedule 19.09.2017    source sumber


Jawaban (2)


Sebenarnya itu berhasil. Masalahnya sepertinya ada pada huawei honor 5x tempat saya menguji aplikasi. Ada cara menghemat baterai yang digunakan ponsel Huawei dan sepertinya itulah sumber masalahnya.

person Tareq Sulaiman    schedule 20.09.2017
comment
Jadi Anda dapat memperbaiki masalah tersebut dengan mematikan pengoptimalan baterai? Versi Android apa yang Anda jalankan saat itu? Saya mengalami masalah serupa dengan banyak ponsel Huawei dan sepertinya kami tidak dapat memperbaikinya. - person Markus Penguin; 08.03.2018
comment
Sebenarnya tidak, saya tidak bisa, Huawei tidak memberi Anda kendali atas semua fitur pengoptimalan baterai. Saya baru saja mulai menggunakan telepon lain untuk pengujian. Saya juga punya banyak masalah dengan ponsel Huawei yang menjalankan layanan latar belakang, jadi pada dasarnya saya berhenti menggunakan ponsel Huawei untuk menguji aplikasi Android. - person Tareq Sulaiman; 08.03.2018

Dalam manifes Anda, elemen <receiver> harus merupakan saudara dari elemen <activity>, bukan elemen turunan:

<?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>
person sdabet    schedule 19.09.2017
comment
Terima kasih banyak atas tanggapannya, namun sayangnya hal itu tidak berhasil. - person Tareq Sulaiman; 19.09.2017
comment
Saat menjalankan aplikasi saya mendapatkan ini di monitor Android: com.example.tsupt.bcr I/SendBroadcastPermission: action:com.example.tsupt.bcr.CUSTOM_INTENT, mPermissionType:0 Apakah itu berarti ada yang tidak beres? - person Tareq Sulaiman; 19.09.2017
comment
Ya, itu berhasil. Masalahnya ada pada perangkat tempat saya menguji aplikasi. - person Tareq Sulaiman; 20.09.2017
comment
Yang mengejutkan, AFAIK elemen penerima diabaikan jika disarangkan dalam elemen aktivitas - person sdabet; 21.09.2017