我是 Android 开发的新手。我正在尝试通过我制作的动态壁纸获利,而广告投放公司希望我从活动的 onCreate 中调用他们的代码。
动态壁纸在我开始通过它获利之前没有任何活动,它是 WallpaperService 的扩展,所以我添加了一个。我设法创建了活动并使其半透明,但是当对话框关闭时它并没有关闭。我无法编辑对话框代码,因为它是通过对 .jar 的调用创建的,所以我想我可以设置一个侦听器以在对话框被关闭时设置,但我找不到任何可能有助于解决问题的实际示例下面的代码。
LWP.java
public class SBLiveWallpaper extends WallpaperService {
super.onCreate();
Intent i = new Intent();
// i.setClass(this, MainActivity.class);
i.setComponent(new ComponentName("appname", "appname.MainActivity"));
// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
activity_main.xml 没有元素(只有 RelativeLayout)
MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppBucksAPI.initialize(this, APPID, "APIKEY", true, null, null);
AppBucksAPI.userOptOutDialog(this, "marketname");
}
我可以使活动不透明,只需添加一个关闭按钮,但这很丑陋并且让用户感到困惑。
编辑澄清:我最初尝试直接从服务的 onCreate() 调用对话框。它会导致 LWP 在您可以将其设为活动 LWP 的屏幕中崩溃。我得到的错误是 android.view.WindowManager$BadTokenException: Unable to add window -- token null 不适用于应用程序。
在在这里发表原始帖子之前,我联系了 AppBucks 支持。他们的回应(粘贴在下面)促使我创建半透明活动。:
我相信这个错误意味着您传递给 AppBucksAPI.userOptOutDialog 方法的第一个参数有问题......从文档中看起来像这样的调用:
AppBucksAPI.userOptOutDialog(this, "<App Name>");
此调用需要 Activity 或 Activity 上下文作为第一个参数。它需要这个,因为我们的默认退出对话框使用 AlertDialog 调用,它需要一个活动的 Activity 才能正确显示。如果您已经与服务一起创建了 Activity,则应该将该 Activity 作为第一个参数而不是“this”传递(或者您可以将此调用移至该 Activity 的 onCreate 而不是服务的 onCreate)。
如果您的应用程序中没有活动,我发现这个 StackOverflow 问题的答案可能会有所帮助(简而言之,您可以在服务启动时创建一个透明活动,并从中调用 userOptOutDialog 而不是您的服务的 onCreate 方法): 将 AlertDialog 显示为来自服务的系统覆盖窗口
不幸的是,上面的文章在假设阅读它的人可以访问对话框的代码的情况下创建活动和关闭对话框。由于我无权访问它,因为它作为库导入到我的项目中,所以我需要知道如何从父活动中收听,以便孩子完成。
我做了一些挖掘,看起来这些中的任何一个都可以工作,这取决于活动是如何从我的代码生成的对话框调用开始的:
或者
今晚我会试一试。