Диалог не появляется после трансляции системы

Я сделал это маленькое приложение, оно не получило ошибок сборки, оно запускается на эмуляторе без сбоев, но оно не прослушивает системные трансляции, как должно быть.

Пожалуйста, помогите мне найти проблему с этим кодом.

Что должен делать код: всякий раз, когда есть какие-либо изменения режима звонка, приложение должно их прослушать, активировать действие, отображаемое как диалог, чтобы сказать «Режим звонка изменен». Я намеренно не использовал тост, потому что мне в конце концов нужно диалоговое окно для выполнения задачи.

Код:

Файл AndroidManifest.xml:

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

<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=".RingerReceiver" android:exported="true">
        <intent-filter>
            <action android:name="android.media.RINGER_MODE_CHANGED"/>
        </intent-filter>
    </receiver>

    <activity android:name=".DialogActivity" android:theme="@style/Theme.AppCompat.Dialog"
        android:excludeFromRecents="true"/>
</application>

</manifest> 

Файл RingerReceiver.java:

package com.example.android.firstbroadcastapp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class RingerReceiver extends BroadcastReceiver {

public String TAG = "This is an example run.";

@Override
public void onReceive(Context context, Intent intent) {
    Log.i(TAG, "This is the beginning of onReceive().");
    Intent dialogintent = new Intent(context, DialogActivity.class);
    context.startActivity(dialogintent);
}
}

Файл DialogActivity.java:

package com.example.android.firstbroadcastapp;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;


public class DialogActivity extends AppCompatActivity{

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
    this.setFinishOnTouchOutside(false);

}
}

Файл activity_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center">

<TextView
    android:layout_height="120dp"
    android:layout_width="match_parent"
    android:text="@string/dialogText"
    android:gravity="center"
    android:background="@color/colorPrimary"
    android:textSize="20sp"
    android:textStyle="bold"
    />


</LinearLayout>

Я не думаю, что здесь необходимо добавить файл activity_main.xml и MainActivity.java, так как они не играют никакой важной роли в приложении.

Приложение запускается, как ожидалось, но всякий раз, когда происходят какие-либо изменения режима звонка, BroadcastReceiver I, зарегистрированный в манифесте, не работает, и, следовательно, диалоговое окно, которое я ожидаю увидеть, тоже не работает.

java,android,android-studio,

0

Ответов: 1


0

Если ваша целевая версия Android - это android Oreo (версия 26) и выше, чем вы не можете добавить <action android:name="android.media.RINGER_MODE_CHANGED"/>как неявное трансляцию в файле android menifest.xml

Проверьте ссылку ниже

Ограничение Backgroud в Oreo

Чтобы прослушать ringer_mode_change, выполните проверку ниже кода

 BroadcastReceiver receiver=new BroadcastReceiver(){
      @Override
      public void onReceive(Context context, Intent intent) {
           //code...
      }
  };
  IntentFilter filter=new IntentFilter(
                  AudioManager.RINGER_MODE_CHANGED_ACTION);
  registerReceiver(receiver,filter);

Чтобы зарегистрировать неявное вещание в файле android menifest.xml, он должен быть в списке исключений

Нечетный список исключений для трансляции

Java, Android, андроид-студия,
Похожие вопросы
Яндекс.Метрика