Java 在后台服务的系统覆盖中显示横幅/本机广告
我一直在开发一个android应用程序,它几乎完成了。基本上,我在其中使用了系统覆盖,我想显示覆盖本身的广告。我的应用程序通过alarm manager向服务发送警报,该服务显示系统覆盖,我希望在覆盖中显示广告。我成功地显示了系统覆盖,但问题是我想在系统覆盖中显示广告(任何横幅或本机),就像来电时Truecaller所做的那样。到目前为止,我所尝试的是-Java 在后台服务的系统覆盖中显示横幅/本机广告,java,android,admob,ads,Java,Android,Admob,Ads,我一直在开发一个android应用程序,它几乎完成了。基本上,我在其中使用了系统覆盖,我想显示覆盖本身的广告。我的应用程序通过alarm manager向服务发送警报,该服务显示系统覆盖,我希望在覆盖中显示广告。我成功地显示了系统覆盖,但问题是我想在系统覆盖中显示广告(任何横幅或本机),就像来电时Truecaller所做的那样。到目前为止,我所尝试的是- private void SetParametersToDisplayShort() { if(allowAlerts) {
private void SetParametersToDisplayShort() {
if(allowAlerts)
{
if(allowAlertsShort)
{
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params;
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.O)
{
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
}
else
{
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
}
params.gravity = Gravity.CENTER;
params.x = 0;
params.y = 0;
ShortAlertView = (RelativeLayout) View.inflate(getApplicationContext(), R.layout.activity_alert_dialog, null);
MobileAds.initialize(getApplicationContext(), initializationStatus ->
{
CardView template = ShortAlertView.findViewById(R.id.ad_container);
refreshAd(template);
template.setVisibility(View.VISIBLE);
});
windowManager.addView(ShortAlertView, params);
TextView time = ShortAlertView.findViewById(R.id.text_time);
SharedPreferences sharedPreferences = getSharedPreferences("Main", MODE_MULTI_PROCESS);
long Time = sharedPreferences.getLong("ShortAlertTimeCountDown", 20000);
long RemainingTime = Time - System.currentTimeMillis();
countDownTimer = new CountDownTimer(RemainingTime, 1000) {
@Override
public void onTick(long l) {
int secondsShort = (int) (l / 1000) % 60;
int minutesShort = (int) ((l / (1000 * 60)) % 60);
String timeLeft = minutesShort + ":" + secondsShort;
time.setText(timeLeft);
}
@Override
public void onFinish() {
try {
if(AllowNotificationVibrate)
{
Vibrate();
}
windowManager.removeView(ShortAlertView);
}
catch (Exception ignored)
{
}
if(isDeviceNotLocked())
{
startMainAlarm();
}
if(AllowNotificationVibrate)
{
Vibrate();
}
if(AllowNotificationSound)
{
StartMediaPlayerClose();
}
stopSelf();
}
};
countDownTimer.start();
}
else
{
startNotificationShort();
if(isDeviceNotLocked())
{
startMainAlarm();
}
stopSelf();
}
}
}
private void refreshAd(CardView cardView)
{
AdLoader.Builder builder = new AdLoader.Builder(this, getString(R.string.ad_native_id));
builder.forNativeAd(unifiedNativeAd -> {
if(nativeAd != null)
{
nativeAd = unifiedNativeAd;
}
NativeAdView adView = (NativeAdView) View.inflate(getApplicationContext(), R.layout.native_ad_layout_small, null);((LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.native_ad_layout, null);
populateNativeAd(unifiedNativeAd, adView);
cardView.removeAllViews();
cardView.addView(adView);
});
AdLoader adLoader = builder.withAdListener(new AdListener() {
@Override
public void onAdClosed() {
super.onAdClosed();
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
super.onAdFailedToLoad(loadAdError);
}
@Override
public void onAdOpened() {
super.onAdOpened();
}
@Override
public void onAdLoaded() {
super.onAdLoaded();
}
@Override
public void onAdClicked() {
super.onAdClicked();
}
@Override
public void onAdImpression() {
super.onAdImpression();
}
}).build();
AdRequest adRequest = new AdRequest.Builder().build();
adLoader.loadAd(adRequest);
}
private void populateNativeAd(NativeAd nativeAd, NativeAdView adView)
{
adView.setHeadlineView(adView.findViewById(R.id.ad_headline));
adView.setAdvertiserView(adView.findViewById(R.id.ad_advertiser));
adView.setBodyView(adView.findViewById(R.id.ad_body_text));
adView.setMediaView(adView.findViewById(R.id.media_view));
adView.setCallToActionView(adView.findViewById(R.id.add_call_to_action));
adView.setIconView(adView.findViewById(R.id.adv_icon));
adView.getMediaView().setMediaContent(nativeAd.getMediaContent());
((TextView)adView.getHeadlineView()).setText(nativeAd.getHeadline());
if(nativeAd.getBody() == null)
{
adView.getBodyView().setVisibility(View.INVISIBLE);
}
else
{
((TextView)adView.getBodyView()).setText(nativeAd.getBody());
adView.getBodyView().setVisibility(View.VISIBLE);
}
if(nativeAd.getAdvertiser() == null)
{
adView.getAdvertiserView().setVisibility(View.INVISIBLE);
}
else
{
((TextView)adView.getAdvertiserView()).setText(nativeAd.getAdvertiser());
adView.getAdvertiserView().setVisibility(View.VISIBLE);
}
try {
adView.setStarRatingView(adView.findViewById(R.id.star_rating));
if(nativeAd.getStarRating() == null)
{
adView.getStarRatingView().setVisibility(View.INVISIBLE);
}
else
{
((RatingBar)adView.getStarRatingView()).setRating(nativeAd.getStarRating().floatValue());
adView.getStarRatingView().setVisibility(View.VISIBLE);
}
}
catch (Exception e)
{
Log.e("TAG", e.toString());
}
if(nativeAd.getIcon() == null)
{
adView.getIconView().setVisibility(View.INVISIBLE);
}
else
{
((ImageView)adView.getIconView()).setImageDrawable(nativeAd.getIcon().getDrawable());
adView.getIconView().setVisibility(View.VISIBLE);
}
if(nativeAd.getCallToAction() == null)
{
adView.getCallToActionView().setVisibility(View.INVISIBLE);
}
else
{
((Button)adView.getCallToActionView()).setText(nativeAd.getCallToAction());
adView.getCallToActionView().setVisibility(View.VISIBLE);
}
adView.setNativeAd(nativeAd);
}
private void SetParametersToDisplayShort(){
if(allowAlerts)
{
if(allowAlertsShort)
{
windowManager=(windowManager)getSystemService(窗口服务);
WindowManager.LayoutParams参数;
if(Build.VERSION.SDK\u INT
{
CardView模板=ShortAlertView.findViewById(R.id.ad_容器);
refreshAd(模板);
template.setVisibility(View.VISIBLE);
});
windowManager.addView(ShortAlertView,参数);
TextView time=ShortAlertView.findViewById(R.id.text\u time);
SharedPreferences SharedPreferences=getSharedPreferences(“主”,模式多进程);
long Time=SharedReferences.getLong(“ShortAlertTimeCountDown”,20000);
long RemainingTime=Time-System.currentTimeMillis();
倒计时=新的倒计时(剩余时间,1000){
@凌驾
公共空白条(长l){
整数秒短=(整数)(l/1000)%60;
int分钟短=(int)((l/(1000*60))%60);
字符串timeLeft=minuteshhort+“:”+secondsShort;
time.setText(timeLeft);
}
@凌驾
公共无效onFinish(){
试一试{
如果(允许振动)
{
振动();
}
windowManager.removeView(ShortAlertView);
}
捕获(忽略异常)
{
}
如果(isDeviceNotLocked())
{
startMainAlarm();
}
如果(允许振动)
{
振动();
}
如果(AllowNotificationsSound)
{
StartMediaPlayerClose();
}
stopSelf();
}
};
countDownTimer.start();
}
其他的
{
startNotificationShort();
如果(isDeviceNotLocked())
{
startMainAlarm();
}
stopSelf();
}
}
}
私有无效刷新AD(CardView CardView)
{
AdLoader.Builder=newadloader.Builder(这个,getString(R.string.ad_native_id));
builder.forNativeAd(统一导航->{
如果(nativeAd!=null)
{
nativeAd=统一的主动权;
}
NativeAdView adView=(NativeAdView)视图。充气(getApplicationContext(),R.layout.native_ad_layout_small,null);((LayoutFlater)getApplicationContext().getSystemService(Context.layout_充气器_SERVICE))。充气(R.layout.native_ad_layout,null);
大众化领导(统一领导、咨询);
removeAllViews();
添加视图(adView);
});
AdLoader AdLoader=builder.withAdListener(新的AdListener(){
@凌驾
已关闭的()上的公共无效{
super.onAdClosed();
}
@凌驾
ADFailedToLoad(@NonNull loadError loadError)上的公共无效{
super.onAdFailedToLoad(装载机错误);
}
@凌驾
公开作废{
super.onadopend();
}
@凌驾
已加载的公共无效(){
super.onadload();
}
@凌驾
已单击()的公共无效项{
super.onAdClicked();
}
@凌驾
公开声明{
super.onAdImpression();
}
}).build();
AdRequest AdRequest=新建AdRequest.Builder().build();
adLoader.loaded(adRequest);
}
私有无效人口(NativeAd NativeAd,NativeAdView adView)
{
adView.setHeadlineView(adView.findviewbyd(R.id.ad_headline));
adView.setAdvertiserView(adView.findViewById(R.id.ad_广告商));
adView.setBodyView(adView.findViewById(R.id.ad_body_text));
adView.setMediaView(adView.findVi