我正在开发一个广播接收器,用于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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在打电话的活动:
import android.app.Activity; …Run Code Online (Sandbox Code Playgroud) android broadcastreceiver android-widget android-layout android-broadcast
我想编写一个应用程序,通过查看我的应用程序中的表(例如SQLite数据库表)来识别传入(未知)调用的电话号码.
我已经使用呼叫目录扩展在iOS中实现了这一点,但对于Android,我能找到的唯一选项是使用带有弹出窗口的 BroadcastReceiver来显示本地来电屏幕以显示联系信息.
ContactsContract.Directory似乎提供了创建自定义目录的可能性,其中本机调用应用程序可以查找调用者ID.不幸的是,我找不到任何关于如何实现这一目标的好例子.
有没有人知道是否可以使用ContactsContract.Directory实现调用者ID,或者Android中是否存在与Android中的呼叫目录扩展相似的内容?如果是这种情况,示例代码将非常有用.
我每次打电话或每次接到电话时都会尝试显示一条消息.我制作了一个适用于INCOMING呼叫但不适用于OUTGOING呼叫的代码.我读过有关这个主题的不同帖子.
任何人都可以告诉我为什么以下代码显示我(当然这段代码没有做我之前提到的所有事情):
- 当我接到电话
时"OUTGOING" - 当我开始通话时"收到"然后"OUTGOING"
/*来自MainActivity*/
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = getApplicationContext();
context.startService(new Intent(context, SvcCall.class));
}
Run Code Online (Sandbox Code Playgroud)
/*来自SvcCall*/
public class SvcCall extends Service
{
private static final String ACTION_OUT = "android.intent.action.PHONE_STATE";
private static final String ACTION_IN = "android.intent.action.NEW_OUTGOING_CALL";
private CallBr br_call;
@Override
public void onCreate()
{
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
final IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_OUT);
filter.addAction(ACTION_IN);
this.br_call = new CallBr();
this.registerReceiver(this.br_call, filter);
return (START_STICKY);
} …Run Code Online (Sandbox Code Playgroud)