android - Activity 不调用服务

标签 android android-activity service

我是android编程的新手。我正在尝试创建一个动态壁纸应用程序。遵循 Lars Vogella 的教程。我创建了一个 Activity 、一个按钮和一个服务。当我单击按钮时,它会进入 onClick 函数。但它不会启动服务。我真的很困惑。

    public class SetWallpaperActivity extends Activity {
    private final String TAG = "SetWallpaperActivity";
    public void onCreate(Bundle savedInstance){
        super.onCreate(savedInstance);
        setContentView(R.layout.main);
    }

    public void onClick(View view){
        Toast.makeText(this, "Entered onClick",Toast.LENGTH_LONG).show();
        Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
        intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, new ComponentName(this,MyWallpaperService.class));
        startActivity(intent);
    }
}

我的服务类看起来像这样

    public class MyWallpaperService extends WallpaperService {
    private final String TAG = "MyWallpaperService";
    public Engine onCreateEngine(){
        Log.v(TAG, "Creating Engine");
        return new RenderEngine();
    }

    public class RenderEngine extends Engine{
        private final Handler handler = new Handler();
        private final Runnable drawRunner = new Runnable(){
            public void run(){
                draw();
            }
        };
        private Paint paint = new Paint();
        private boolean visible = true;
        private int width;
        int height;


        public RenderEngine(){
            paint.setAntiAlias(true);
            paint.setColor(Color.WHITE);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeJoin(Paint.Join.ROUND);
            paint.setStrokeWidth(10.0f);
            handler.post(drawRunner);
        }

        @Override
        public void onVisibilityChanged(boolean visibility){
            this.visible = visibility;
            if(visibility){
                handler.post(drawRunner);
            }else{
                handler.removeCallbacks(drawRunner);
            }
        }

        @Override
        public void onSurfaceDestroyed(SurfaceHolder holder){
            super.onSurfaceDestroyed(holder);
            this.visible = false;
            handler.removeCallbacks(drawRunner);
        }

        @Override
        public void onSurfaceChanged(SurfaceHolder holder, int format,
                                     int width, int height) {
            this.width = width;
            this.height = height;
            super.onSurfaceChanged(holder, format, width, height);
        }

        public void draw(){
            SurfaceHolder holder = getSurfaceHolder();
            Canvas c = null;
            Log.v(TAG,"Entered Draw");
            try{
                c = holder.lockCanvas();
                if(c != null){
                    Log.v(TAG,"Entered Try");
                }
            }finally{
                if(c != null){
                    holder.unlockCanvasAndPost(c);
                }
            }
            handler.removeCallbacks(drawRunner);
            if(visible){
                handler.postDelayed(drawRunner,5000);
            }
        }
    }
}

谁能帮我解决一下?我被困在这里3天了。

编辑:

<service
    android:name=".MyWallpaperService"
    android:enabled="true"
    android:label="Wallpaper Example"
    android:permission="android.permission.BIND_WALLPAPER">

    <intent-filter>
        <action android:name="android.intent.action.WallpaperService"/>
    </intent-filter>

    <meta-data
        android:name="android.service.wallpaper"
        android:resource="@xml/mywallpaper">

    </meta-data>

</service>

最佳答案

确保您的服务已在 list 中声明并且具有适当的权限:

The service requires the permission android.permission.BIND_WALLPAPER and must be registered via an intent-filter for the android.service.wallpaper.WallpaperService action.

此外,不要忘记在您的 list 中声明它

<service android:enabled="true" android:name=".MyWallPaperservice" />

关于android - Activity 不调用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28266827/

相关文章:

android - LifecycleRegistryOwner 类已弃用

java - Android rtl 支持无需重新加载 Activity

python - 设置系统环境变量

Jenkins 不是作为 Windows 服务开始的

php - 如何制作一个通过 Web 服务器接受命令的 Linux 服务?

java - Android Studio : App doesn't start with implemented Anonymous Java Class

android - React-Native Android 表情符号

java - 在 Google Glass 上部署玻璃器皿

java - 我们可以使用 SharedPreference 将数据从一个 Activity 共享或传输到另一个 Activity 吗?

android-如何关闭应用程序并从头开始