标签: android-wallpaper

BroadcastReceiver for WALLPAPER_CHANGED多次调用onReceive():Android

我有一个BroadcastReceiver并声明它是这样的:

<receiver
    android:name="com.services.Receiver"
    android:enabled="true"
    android:exported="true" >
    <intent-filter android:priority="999" >
        <action android:name="android.intent.action.WALLPAPER_CHANGED" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

接收者是:

@Override
public void onReceive(final Context context, final Intent intent)
{
    change_wallpepar.myPrefs = context.getSharedPreferences("myPrefs", Context.MODE_PRIVATE);
    new Handler().postDelayed(new Runnable()
    {
        @Override
        public void run()
        {
            Log.d("MAYUR", "<< wallpepar changed >>");
            if (change_wallpepar.myPrefs.getLong("temp_for_change", 1) == 0)
            {
                context.stopService(new Intent(context, change_wallpepar.class));
            }
            else
            {
                SharedPreferences.Editor e = change_wallpepar.myPrefs.edit();
                e.putLong("temp_for_change", 0);
                e.commit();
            }
        }
    }, 4000);
}
Run Code Online (Sandbox Code Playgroud)

当我在这里更改壁纸时,它应该被调用一次.它实际上是按照我的期望工作了一段时间,在几分钟后它会调用onreceive()多次(10-18)次,即使壁纸的更改已完成一次.更奇怪的是,它在三星Galaxy平板电脑版本4.4.2上运行良好,但不适用于摩托罗拉(Moto E 4.4.4).

我的服务:

public class change_wallpepar extends Service {

    @Override …
Run Code Online (Sandbox Code Playgroud)

android android-service android-broadcast android-wallpaper

17
推荐指数
1
解决办法
1043
查看次数

以编程方式更改锁定屏幕背景

我正在尝试从我的应用程序更改锁定屏幕背景图像,但我无法弄清楚如何做到这一点.我成功地使用WallPaperManager更改了主屏幕壁纸,但找不到为锁定屏幕执行相同操作的源.我知道QuickPic和Stock Gallery这样的应用程序会这样做,所以我该如何实现呢?

这是我用来更改主屏幕的代码:

WallpaperManager myWallpaperManager = WallpaperManager
                .getInstance(getApplicationContext());

try {
    myWallpaperManager.setBitmap(bm);
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

有人实施了这个请指出我正确的方向与我的应用程序这样做?

android lockscreen android-wallpaper

7
推荐指数
0
解决办法
1328
查看次数

Android 12+ 中使用 WallpaperManager 的奇怪行为

这是最新版本 Android 中的 WallpaperManager 的错误吗?

设置壁纸时,会自动销毁并重新加载当前activity。

此行为似乎仅影响 Android 12 及更高版本。用 Kotlin 编写代码非常容易复制:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val randomResourceList = arrayListOf(R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5)
    val randomValue = (0 until randomResourceList.size).random()
    val wallpaper = randomResourceList[randomValue]

    val bmp = BitmapFactory.decodeResource(resources, wallpaper)
    val wallpaperManager = WallpaperManager.getInstance(this)
    wallpaperManager.setBitmap(bmp, null, true)
}

override fun onDestroy() {
    super.onDestroy()
    Log.d("tag", "Destroyed.")
}
Run Code Online (Sandbox Code Playgroud)

添加一些图像(包括几张,因为如果壁纸图像与上一个相同,则不会设置壁纸,因此是随机的)

然后,您应该看到活动被销毁并在一个周期中重新加载。不会引发任何错误,并且壁纸实际上每次都会更改。

在我的特定情况下,在前台服务中的计时器上设置壁纸时,这会造成严重破坏。如果更换壁纸时用户恰好在屏幕上进行活动,则该活动将会被破坏。

android android-wallpaper wallpapermanager

7
推荐指数
1
解决办法
1024
查看次数

对于不推荐使用的方法意味着什么,以及如何解决产生的错误?

为什么我在包含的行上会出现弃用错误setWallpaper(bmp),如何解决?

错误:不推荐使用Context类型的方法setWallpaper(Bitmap)

switch(v.getId()){
 case R.id.bSetWallpaper:
try {
            getApplicationContext().setWallpaper(bmp);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        break;
Run Code Online (Sandbox Code Playgroud)

java android android-wallpaper

6
推荐指数
2
解决办法
2673
查看次数

如何获得android锁屏壁纸?

我使用下面的代码检索android 8.1手机上的android锁屏壁纸:

WallpaperManager manager = WallpaperManager.getInstance(getActivity());
ParcelFileDescriptor pfd = manager.getWallpaperFile(WallpaperManager.FLAG_LOCK);
if (pfd == null) // pfd is always null for FLAG_LOCK, why?
    return;
Bitmap lockScreenWallpaper = BitmapFactory.decodeFileDescriptor(pfd.getFileDescriptor());
// ...
Run Code Online (Sandbox Code Playgroud)

我已经授予了READ_EXTERNAL_STORAGE许可并预先设置了锁屏壁纸.

我在真正的手机上运行演示,发现pfd它总是为空FLAG_LOCK,所以我无法获得锁屏壁纸.请帮忙解决问题,谢谢.

android lockscreen android-wallpaper

6
推荐指数
2
解决办法
1251
查看次数

如何使用getCropAndSetWallpaperIntent(Uri imageUri)工作?

那么,有两个问题与此相同( 如何在WallpaperManager中使用getCropAndSetWallpaperIntent方法? AND 如何使用getCropAndSetWallpaperIntent? ),但两者都没有答案.希望得到一个答案,我问这个 - 如何使这个方法工作.

http://developer.android.com/reference/android/app/WallpaperManager.html#getCropAndSetWallpaperIntent(android.net.Uri),这对我的大脑没有帮助.

这不起作用

WallpaperManager wallpaperManager = WallpaperManager.getInstance(MainActivity.this);
Uri uri = Uri.parse("android.resource://lv.revo.inspicfootballhd/drawable/v1");
Intent intent = new Intent(wallpaperManager.getCropAndSetWallpaperIntent(uri));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

logcat显示了这一点

5891-5891/? E/AndroidRuntime? FATAL EXCEPTION: main
    Process: lv.revo.inspicfootballhd, PID: 5891
    java.lang.IllegalArgumentException: Image URI must be of the content scheme type
            at android.app.WallpaperManager.getCropAndSetWallpaperIntent(WallpaperManager.java:760)
            at lv.revo.inspicfootballhd.MainActivity.onTouch(MainActivity.java:236)
            at android.view.View.dispatchTouchEvent(View.java:7701)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2338)
            at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1568)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2465)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2285)
            at android.view.View.dispatchPointerEvent(View.java:7886) …
Run Code Online (Sandbox Code Playgroud)

android uri android-intent android-wallpaper

5
推荐指数
1
解决办法
1883
查看次数

其他动态壁纸应用程序无法访问动态壁纸

我开发了一个动态壁纸应用程序,它只能从谷歌的动态壁纸应用程序访问,但像小米、Oppo 这样的手机有自己的壁纸应用程序,而我的应用程序没有显示在他们的壁纸部分。谁能帮我解决这个问题或将我重定向到一个想法来解决这个问题?

这是我的 Wallpaper.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=""/>
Run Code Online (Sandbox Code Playgroud)

这是我的清单文件

<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>
Run Code Online (Sandbox Code Playgroud)

这是我的 WallpaperService 类文件

 @Override
public Engine onCreateEngine() {

    return new MyWallpaperEngine();
}
private class MyWallpaperEngine extends Engine{
    public Bitmap image1, image2, image3;
    private int count_new =0;
    private …
Run Code Online (Sandbox Code Playgroud)

java android wallpaper live-wallpaper android-wallpaper

5
推荐指数
0
解决办法
139
查看次数

从url将图像设置为壁纸

我想创建一个应用程序,允许用户通过单击按钮将图像设置为壁纸.此图像将位于网址中,并且墙纸的设置通过AsyncTask执行.我按照此视频中显示的步骤进行了操作:https://www.youtube.com/watch?v = JeA8Z8dtD10,但它对我不起作用.该应用程序显示按钮,但当我点击它时会发生任何事情.

这是代码:

package com.example.myapplication4;

import android.app.Activity;
import android.app.ProgressDialog;
import android.app.WallpaperManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import javax.net.ssl.HttpsURLConnection;

public class MainActivity extends Activity {

public ProgressDialog progressDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btnSetWallpaper = (Button) findViewById(R.id.button);

    btnSetWallpaper.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String urlImage ="https://www.geektopia.es/storage/geek/posts/2015/08/17/marshmallow.jpg";
            new SetWallpaperTask().equals(urlImage);

        }
    }); …
Run Code Online (Sandbox Code Playgroud)

url android android-wallpaper

2
推荐指数
1
解决办法
5857
查看次数

getCropAndSetWallpaperIntent() 内容 Uri 错误

getCropAndSetWallpaperIntent()在android中使用时出现此错误

D/Exception: java.lang.IllegalArgumentException: Cannot use passed URI to set wallpaper; check that the type returned by ContentProvider matches image/*
Run Code Online (Sandbox Code Playgroud)

但是当我检查Content使用类型时,ContentResolver我得到了

D/CONTENT TYPE:: IS: image/jpeg

那么为什么Wallpaper Manager给我内容错误?

这是我用来获取图像 URI 的代码

    public Uri getImageUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    tempPath = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
    Log.d("URI OF SET IMAGE", tempPath);
    ContentResolver cr = this.getContentResolver();
    Log.d("CONTENT TYPE: ", "IS: " + cr.getType(Uri.parse(tempPath)));
    return Uri.parse(tempPath);
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

android android-contentresolver android-contentprovider android-wallpaper

2
推荐指数
1
解决办法
588
查看次数

检测背景壁纸是否太亮或太暗

当用户选择的壁纸太亮或太暗时,我想更改我的文本视图颜色,基本上充当最新的启动器,例如,如果设置白色壁纸,请将所有文本视图更改为深色,但我不知道如何检测到这一点。

帮助。提前致谢。

android android-launcher android-wallpaper android-color

2
推荐指数
1
解决办法
1969
查看次数