Я разработал приложение для живых обоев, и оно доступно только из приложения Google для живых обоев, но есть телефоны, такие как Xiaomi, Oppo, у которых есть собственное приложение для обоев, и Мое приложение не отображается в их разделе обоев. Может кто-нибудь помочь мне решить эту проблему или перенаправить меня к идее исправить это?
Это мои обои. xml файл
<?xml version="1.0" encoding="UTF-8"?>
<wallpaper
xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/wallpaper_description"
android:thumbnail="@raw/element1"
android:settingsActivity=""/>
Это файл моего манифеста
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.edustan.mywallpaper">
<uses-feature
android:name="android.software.live_wallpaper"
android:required="true" />
<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="AllowBackup,GoogleAppIndexingWarning" >
<service
android:name=".MyWallpaperService"
android:enabled="true"
android:label="Wallpaper Example "
android:permission="android.permission.BIND_WALLPAPER">
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" />
</intent-filter>
<meta-data
android:name="android.service.wallpaper"
android:resource="@xml/wallpaper" />
</service>
</application>
Это файл класса My WallpaperService
@Override
public Engine onCreateEngine() {
return new MyWallpaperEngine();
}
private class MyWallpaperEngine extends Engine{
public Bitmap image1, image2, image3;
private int count_new =0;
private int previous_count=0;
SharedPreferences pref = context.getSharedPreferences("MyPref", 0);
Editor editor = pref.edit();
private Handler handler = new Handler();
int height=1920,width=1080;
boolean first_time = pref.getBoolean("first",true);
boolean second_time = pref.getBoolean("second",true);
public MyWallpaperEngine(){
Log.d("wallyt","Unlocked");
image1 = BitmapFactory.decodeResource(getResources(), R.raw.element1);
}
@Override
public void onCreate(SurfaceHolder surfaceHolder) {
super.onCreate(surfaceHolder);
if(!isPreview()) {
ScreenOffReceiver screenOffReceiver = new ScreenOffReceiver();
registerReceiver(screenOffReceiver, new IntentFilter(Intent.ACTION_SCREEN_OFF));
Log.d("wallyt", "OnCreate Called");
count_new = pref.getInt(COUNT_KEY,0);
}
else{
count_new = previous_count;
}
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
super.onSurfaceChanged(holder, format, width, height);
width=width;
height=height;
}
public void onOffsetsChanged(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels)
{
Log.d("Wallytab",xOffset + " "+yOffset+" " + xStep+ " "+ yStep + " "+ xPixels+ " "+yPixels);
float x = pref.getFloat("xpixels",xPixels);
editor.putFloat("xpixels",xPixels);
editor.apply();
if(x==xPixels&&(count_new==0||count_new>previous_count)) {
drawFrame();
previous_count=count_new;
}
}
void drawFrame()
{
Log.d("wallyt","drawFrame Called");
final SurfaceHolder holder = getSurfaceHolder();
Canvas c = null;
int n = pref.getInt(COUNT_KEY,0)+1;
try
{
c = holder.lockCanvas();
if (c != null)
{
try {
Log.i("wallyt", "Wallpaper Change open");
Bitmap overlay= BitmapFactory.decodeResource(context.getResources(),img[(n) % 120]);
// Bitmap bg = BitmapFactory.decodeResource(context.getResources(), R.raw.white);
Bitmap bg = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bg.eraseColor(Color.WHITE);
int bitmap1Width = bg.getWidth();
int bitmap1Height = bg.getHeight();
int bitmap2Width = overlay.getWidth();
int bitmap2Height = overlay.getHeight();
float marginLeft = (float) (bitmap1Width * 0.5 - bitmap2Width * 0.5);
float marginTop = (float) (bitmap1Height * 0.5 - bitmap2Height * 0.5);
int width = Resources.getSystem().getDisplayMetrics().widthPixels;
int height = Resources.getSystem().getDisplayMetrics().heightPixels;
Rect screenBounds = new Rect(0,0,width,height);
Bitmap finalBitmap = Bitmap.createBitmap(bitmap1Width, bitmap1Height, bg.getConfig());
Canvas canvas = new Canvas(finalBitmap);
canvas.drawBitmap(bg, new Matrix(), null);
canvas.drawBitmap(overlay, marginLeft, marginTop, null);
c.drawBitmap(finalBitmap, null, screenBounds, null);
editor.putInt(COUNT_KEY,n+1);
editor.putBoolean("first",false);
editor.apply();
Log.d("wallyt","count"+n);
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("Wally",e.getMessage());
}
}
} finally
{
if (c != null) holder.unlockCanvasAndPost(c);
}
}