[설명]

Boradcast Receiver에는 암시적, 명시적이 있다.

 

암시적인 경우 Manifest에 등록해둔 Intent를 받아서 Boradcast Receiver에 보내는 것이고

명시적인 경우 Broadcast Receiver의 객체를 생성하고 Intent를 등록하는 방법이다.

 

 

[암시적]

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

    <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/Theme.GPSPicker2">
        <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=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>

 

[명시적]

public class MainActivity extends AppCompatActivity {

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

        MyReceiver receiver = new MyReceiver();
        IntentFilter filter = new IntentFilter(Intent.ACTION_POWER_CONNECTED);
        this.registerReceiver(receiver, filter); 
    }
}

 

 

[문제]

하지만 왜인지 암시적 Broadcast Receiver가 잘 동작하지 않는 경우가 발생한다.

이유를 살펴보니 sdk25 이후의 버전에서는 암시적 Broadcast Receiver를 막아둬서 동작하지 않는 것이었고 

 

[해결방법]

sdk를 25로 수정하니 잘 동작하였다.

 

+ Recent posts