Android 风味 ACTION_CHANGE_LIVE_WALLPAPER
Android Flavor ACTION_CHANGE_LIVE_WALLPAPER
您好,我正在尝试为动态壁纸添加 android 应用风格(免费且完整)。在 Eclipse 中,我曾经使用以下代码从我自己的 android Activity:
打开动态壁纸预览
Intent intent = new Intent();
intent.setAction(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
String pkg = WallpaperService.class.getPackage()
.getName();
String cls = WallpaperService.class.getCanonicalName();
intent.putExtra(
WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
new ComponentName(pkg, cls));
但现在它无法正常工作,因为在 android studio 中,免费版和完整版使用相同的包名称,只是 applicationId 不同。问题是当它以免费版或完整版启动时,无论如何都会转到完整版,无论它是什么风格。我在项目 gradle 中使用 applicationId 指定应用风格,如下所示:
productFlavors {
free {
applicationId "com.kkl.app.free"
}
full {
applicationId "com.kkl.app"
}
}
我们如何才能获得与应用风格匹配的正确包名称?
您可以在 Activity
中调用 getPackageName()
来获取 Android packageName。这将是清单文件中的 packageName,即等于当前 applicationId 的那个。
可以找到方法文档 here。
已使用以下内容修复:
intent.setAction(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
String pkg = getPackageName();
String cls = WallpaperService.class.getCanonicalName();
intent.putExtra(
WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
new ComponentName(pkg, cls));
特别感谢 Lingviston
你可以用 flavors 做很多事情,但你想做的事情比任何人回答的要简单得多。
首先你有一个构建变体 select 你的调试风格和 运行。所以使用这个,否则你所有的调试都将使用默认的主版本。
其次,您不必获取包名称,只需使用构建配置标志或检查风格即可。即
android {
signingConfigs {
releaseA35Demo {
storeFile file("$projectDir/../yaskeystore.jks")
storePassword System.getenv('YOUR_APP_STUDIO_STORE_PASSWORD')
keyAlias System.getenv('YOUR_APP_STUDIO_KEY_ALIAS')
keyPassword System.getenv('YOUR_APP_STUDIO_KEY_PASSWORD')
}
}
flavorDimensions 'default'
productFlavors {
a35Demo {
dimension 'default'
applicationId "com.appstudio35.yourappstudio"
buildConfigField "String", "SERVER_URL", '"http://fakeNumbers.compute-1.amazonaws.com:3006"'
buildConfigField "int", "BUSINESS_ID", "1"
versionCode 1
versionName "0.01.01-b1"
minSdkVersion 21
}
a35DemoDev {
dimension 'default'
applicationId "com.appstudio35.yourappstudio.dev"
buildConfigField "String", "SERVER_URL", '"http://fakeNumbers2.compute-1.amazonaws.com:3006"'
buildConfigField "int", "BUSINESS_ID", "2"
versionCode 1
versionName "0.01.01-b1"
minSdkVersion 21
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
productFlavors.a35Demo.signingConfig signingConfigs.releaseA35Demo
productFlavors.a35DemoDev.signingConfig signingConfigs.releaseA35Demo
}
}
}
然后简单地在代码中引用它:
BuildConfig.BUSINESS_ID
任何你需要的地方。只需确保您在自动导入 BuildConfig 时不会意外使用库项目的 BuildConfig。
下一个方法是,如果你想检查你的口味,你可以简单地做
BuildConfig.FLAVOR 看看你在哪一个。但是,请记住有一些关于使用它的编译器警告,因为您正在检查一种风格,并且 BuildConfig 假定它始终是您当前在 Build Variant 下拉列表中的任何内容,这是不正确的,您可以忽略它总是正确的或者总是错误的警告,我向你保证它有效。
最后,您的包问题只是因为您正在调试错误的构建变体。我会添加一张图片,这样您就可以看到要更改的地方。
希望对您有所帮助。
您好,我正在尝试为动态壁纸添加 android 应用风格(免费且完整)。在 Eclipse 中,我曾经使用以下代码从我自己的 android Activity:
打开动态壁纸预览 Intent intent = new Intent();
intent.setAction(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
String pkg = WallpaperService.class.getPackage()
.getName();
String cls = WallpaperService.class.getCanonicalName();
intent.putExtra(
WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
new ComponentName(pkg, cls));
但现在它无法正常工作,因为在 android studio 中,免费版和完整版使用相同的包名称,只是 applicationId 不同。问题是当它以免费版或完整版启动时,无论如何都会转到完整版,无论它是什么风格。我在项目 gradle 中使用 applicationId 指定应用风格,如下所示:
productFlavors {
free {
applicationId "com.kkl.app.free"
}
full {
applicationId "com.kkl.app"
}
}
我们如何才能获得与应用风格匹配的正确包名称?
您可以在 Activity
中调用 getPackageName()
来获取 Android packageName。这将是清单文件中的 packageName,即等于当前 applicationId 的那个。
可以找到方法文档 here。
已使用以下内容修复:
intent.setAction(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
String pkg = getPackageName();
String cls = WallpaperService.class.getCanonicalName();
intent.putExtra(
WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
new ComponentName(pkg, cls));
特别感谢 Lingviston
你可以用 flavors 做很多事情,但你想做的事情比任何人回答的要简单得多。
首先你有一个构建变体 select 你的调试风格和 运行。所以使用这个,否则你所有的调试都将使用默认的主版本。
其次,您不必获取包名称,只需使用构建配置标志或检查风格即可。即
android {
signingConfigs {
releaseA35Demo {
storeFile file("$projectDir/../yaskeystore.jks")
storePassword System.getenv('YOUR_APP_STUDIO_STORE_PASSWORD')
keyAlias System.getenv('YOUR_APP_STUDIO_KEY_ALIAS')
keyPassword System.getenv('YOUR_APP_STUDIO_KEY_PASSWORD')
}
}
flavorDimensions 'default'
productFlavors {
a35Demo {
dimension 'default'
applicationId "com.appstudio35.yourappstudio"
buildConfigField "String", "SERVER_URL", '"http://fakeNumbers.compute-1.amazonaws.com:3006"'
buildConfigField "int", "BUSINESS_ID", "1"
versionCode 1
versionName "0.01.01-b1"
minSdkVersion 21
}
a35DemoDev {
dimension 'default'
applicationId "com.appstudio35.yourappstudio.dev"
buildConfigField "String", "SERVER_URL", '"http://fakeNumbers2.compute-1.amazonaws.com:3006"'
buildConfigField "int", "BUSINESS_ID", "2"
versionCode 1
versionName "0.01.01-b1"
minSdkVersion 21
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
productFlavors.a35Demo.signingConfig signingConfigs.releaseA35Demo
productFlavors.a35DemoDev.signingConfig signingConfigs.releaseA35Demo
}
}
}
然后简单地在代码中引用它:
BuildConfig.BUSINESS_ID
任何你需要的地方。只需确保您在自动导入 BuildConfig 时不会意外使用库项目的 BuildConfig。
下一个方法是,如果你想检查你的口味,你可以简单地做 BuildConfig.FLAVOR 看看你在哪一个。但是,请记住有一些关于使用它的编译器警告,因为您正在检查一种风格,并且 BuildConfig 假定它始终是您当前在 Build Variant 下拉列表中的任何内容,这是不正确的,您可以忽略它总是正确的或者总是错误的警告,我向你保证它有效。
最后,您的包问题只是因为您正在调试错误的构建变体。我会添加一张图片,这样您就可以看到要更改的地方。
希望对您有所帮助。