Обновление - 09 мая 2013 г. * Я попытался внедрить Toast в приемник широковещательной передачи onReceive, потому что тост является родным компонентом Android, но он также не отображается в Android 4.1 (Jelly Bean).
Моя идея заключалась в том, чтобы внедрить Toast в приемник широковещательного приема onReceive, а затем изменить его дизайн в соответствии с нашими потребностями и настроить его продолжительность отображения. Но еще одна проблема заключается в том, что findViewById не работает в широковещательном приемнике, поэтому я думаю, что мы должны сделать LinearLayout программным способом для настройки тоста. *
Обновление. После щедрости также я не получаю то, что ищу, но я вернусь ко всем; Я работаю над этим. Во всяком случае, этот код работает для большинства телефонов Android. Если кто-то собирается использовать и поймать решение для этого, напишите здесь, чтобы каждый мог получить выгоду. Спасибо за все ваши ответы.
Я разрабатываю широковещательный приемник для входящих звонков в Android и при поступлении входящих звонков, которые я хочу раздуть всплывающее окно по собственному экрану входящих вызовов.
Я завершил этот код. Но теперь проблема заключается в том, что в Android 4.1 (Jelly Bean) уровне API 17, когда телефон звонит, PHONE_STATE
подходит как OFF HOOK
, и если я вызываю действие, он вызывается, но код под ним не выполняется. Я перечисляю код:
Мой вещательный приемник
package com.example.popwindowonincomingcallscreen;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
public class IncomingBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("IncomingBroadcastReceiver: onReceive: ", "flag1");
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
Log.d("IncomingBroadcastReceiver: onReceive: ", state);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)
|| state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
Log.d("Ringing", "Phone is ringing");
Intent i = new Intent(context, IncomingCallActivity.class);
i.putExtras(intent);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
Wait.oneSec();
context.startActivity(i);
}
}
}
Я выполняю действия, которые я вызываю:
import android.app.Activity;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.View.MeasureSpec;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
public class IncomingCallActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
try {
Log.d("IncomingCallActivity: onCreate: ", "flag2");
*/ After this line, the code is not executed in Android 4.1 (Jelly Bean) only/*
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
Log.d("IncomingCallActivity: onCreate: ", "flagy");
setContentView(R.layout.main);
Log.d("IncomingCallActivity: onCreate: ", "flagz");
String number = getIntent().getStringExtra(
TelephonyManager.EXTRA_INCOMING_NUMBER);
TextView text = (TextView) findViewById(R.id.text);
text.setText("Incoming call from " + number);
}
catch (Exception e) {
Log.d("Exception", e.toString());
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
После
try {
Log.d("IncomingCallActivity: onCreate: ", "flag2");
}
Код не выполняется в Android 4.1 (Jelly Bean), но в других версиях он работает.
Я пробовал почти все, что могу. Этот код отображает полупрозрачную активность на экране собственных вызовов, и он не блокирует фоновые элементы управления, например, поднимает телефон. Но я хочу, чтобы он был истинным абонентом. Я приложил снимок о том, как истинный вызывающий абонент отображает окно на экране входящих вызовов.
Как я могу достичь этой функциональности для Android-приложения?
Вот как работает истинный вызывающий абонент:
Мой текущий вывод: