Android8.0 브로드캐스트 전송 및 수신자를 사용자 정의할 때의 문제

7707 단어 Android
안드로이드 8.0 라디오 송신자와 수신자를 사용자 정의할 때의 문제
우선 8.0 이전에 방송 수신자를 사용자 정의할 때의 코드를 붙여 놓으세요.먼저 방송을 보내는 단추를 정의해서 방송을 보내는 데 사용합니다
				Intent intent = new Intent();
                intent.setAction("com.itcast.interceptcall.broadcast");
                intent.putExtra("data","data");
                sendBroadcast(intent);

여기에 무질서한 방송을 보내고 위에서 보낸 방송을 받기 위해 BroadcastReceiver을 새로 만들었다.
	public class MyBroadCastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        String str = intent.getStringExtra("data");
        Log.i("MyBroadCastReceiver ",str);
        Log.i("MyBroadCastReceiver ","         ,        ");
        Log.i("MyBroadCastReceiver ",intent.getAction());
    }
}

새 라디오 수신자를 만들 때 안드로이드스튜디오는 자동으로 목록 파일 AndroidManifst.xml에 성명을 추가하지만, 우리는 라디오를 보내는 것과 같은 방송 성명을 제시해야 합니다.
        <receiver
            android:name=".BroadCastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.itcast.interceptcall.broadcast"/>
            </intent-filter>
        </receiver>

또한 우리는 그 중에서 권한 성명에 가입해야 한다
    <permission-->
        <!--android:name="com.example.broadcast.permission"-->
        <!--android:protectionLevel="normal" />
    <uses-permission android:name="com.example.broadcast.permission" />

이렇게 하면 우리는 방송 수신자를 사용자 정의하여 사용자 정의 송신 방송을 수신할 수 있다. 그러나 뒤에 안드로이드 8.0과 이상의 버전에서 이렇게 하면 방송을 수신할 수 없고 프로그램이 끊기지 않는다. 이것은 안드로이드 버전이 방송 송신과 수신에 대한 높은 요구가 있기 때문에 더욱 상세한 설명이 필요하다.정적 등록 브로드캐스트 수신자는 브로드캐스트를 보낼 때 코드를 추가해야 합니다.
intent.setComponent(new ComponentName("com.itcast.interceptcall","com.itcast.interceptcall.BroadCastReceiver"));
//ComponentName               ,             

사실 동적 등록 수신자일 때는 이렇게 할 필요가 없다.
receiver = new MyReceiver();
IntentFilter filter = new IntentFilter("android.intent.action.MyReceiver");
getActivity().registerReceiver(receiver, filter);
Intent intent = new Intent("android.intent.action.MyReceiver");
getActivity().sendBroadcast(intent);
위의 권한 성명 한 조각은 책에서 말한 대로 덧붙였지만 본인은 이 두 가지 권한 성명을 덧붙이지 않아도 방송을 성공적으로 수신하고 발송할 수 있음을 발견하였다.(이곳에는 어떤 권위 있는 성명도 없고 단지 주석일 뿐이다.)

좋은 웹페이지 즐겨찾기