gpt4 book ai didi

android - 来电屏幕上的弹出窗口,如 truecaller

转载 作者:太空狗 更新时间:2023-10-29 15:34:48 27 4
gpt4 key购买 nike

我正在尝试在来电屏幕上添加弹出窗口作为真正的调用者,但未能实现。让我知道这背后的逻辑是什么以及我如何实现它

  public void onReceive(Context context, Intent intent) {

try {
// TELEPHONY MANAGER class object to register one listner
TelephonyManager tmgr = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);


}
} catch (Exception e) {
Log.e("Phone Receive Error", " " + e);
}

}

最佳答案

我为我的应用程序使用了以下方法,其中我想在 Dialer 应用程序启动时在其顶部显示一个 View (类似于 Truecaller 中的 View )。为此,创建一个广播接收器,它有助于接受各种设备如下所述的事件。

广播接收器:

        private WindowManager wm;
private static LinearLayout ly1;
private WindowManager.LayoutParams params1;

// onReceive function of the Broadcast Receiver
public void onReceive(Context arg0, Intent arg1) {
String state = arg1.getStringExtra(TelephonyManager.EXTRA_STATE);

// Adds a view on top of the dialer app when it launches.
if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
params1 = new WindowManager.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT |
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSPARENT);

params1.height = 75;
params1.width = 512;
params1.x = 265;
params1.y = 400;
params1.format = PixelFormat.TRANSLUCENT;

ly1 = new LinearLayout(context);
ly1.setBackgroundColor(Color.BLACK);
ly1.setOrientation(LinearLayout.VERTICAL);

wm.addView(ly1, params1);
}

// To remove the view once the dialer app is closed.
if(arg1.getAction().equals("android.intent.action.PHONE_STATE")){
String state = arg1.getStringExtra(TelephonyManager.EXTRA_STATE);
if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
if(ly1!=null)
{
wm.removeView(ly1);
ly1 = null;
}
}
}
}

PS:上面的示例生成了一个具有黑色背景布局的 View ,其尺寸如上所示。您可以在该 View 中自由添加任何布局。例如:包含一个布局在 View 中,您可以修改上面的代码以包括以下内容:

        ly1 = new LinearLayout(getApplicationContext());
ly1.setOrientation(LinearLayout.HORIZONTAL);


View hiddenInfo = getLayoutInflater().inflate(R.layout.layout1, ly1, false);
ly1.addView(hiddenInfo);

wm.addView(ly1, params1);

PS:Layout1 是您需要在布局文件夹中创建并在此处引用的布局。

此外,您需要在您的 list 中包含以下权限。

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<action android:name="android.intent.action.PHONE_STATE" /> (within intent filter of Broadcast Receiver)

关于android - 来电屏幕上的弹出窗口,如 truecaller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23701879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com