android - Widget crashes when Button created -
first: newby. if surprising easy solution, please don't harass me.
i new widgets , wanted start doing them. flashlight program.
the problem is: can create widget when declare button in layout file, widget crashes , thing can see "fehler"(means "error" in german).
here xml file:
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minheight="40dp" android:minwidth="40dp" android:resizemode="" android:updateperiodmillis="100" android:initiallayout="@layout/widget_switch" android:widgetcategory="home_screen"> </appwidget-provider>
the layout file is:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:background="@drawable/appwidget_dark_bg"> <button android:id="@+id/switchbutton" android:layout_width="match_parent" android:layout_height="match_parent" android:texton="@string/toggle"/> </linearlayout>
the receiver part of manifest is:
<receiver android:label="flashlight widget" android:name="mywidgetprovider" > <intent-filter > <action android:name="android.appwidget.action.appwidget_update" /> <action android:name="android.appwidget.action.widget_button" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_switch" /> </receiver>
and java file, in same package mainactivity
package com.quicksilver.flashlight; import android.app.pendingintent; import android.appwidget.appwidgetmanager; import android.appwidget.appwidgetprovider; import android.content.context; import android.content.intent; import android.hardware.camera; import android.hardware.camera.parameters; import android.widget.remoteviews; public class widget_switch extends appwidgetprovider { boolean clicked = true; boolean camera_initialized=false; camera mcamera; public static string widget_button = "android.appwidget.action.widget_button"; public void onupdate(context context, appwidgetmanager appwidgetmanager, int[] appwidgetids) { if (!camera_initialized){ mcamera=camera.open(); camera_initialized=true; } remoteviews remoteviews = null; remoteviews = new remoteviews(context.getpackagename(), r.layout.widget_switch); intent intent = new intent(widget_button); pendingintent pendingintent = pendingintent.getbroadcast(context, 0, intent, pendingintent.flag_update_current); remoteviews.setonclickpendingintent(r.id.switchbutton, pendingintent ); } public void onrecieve(context context, intent intent) { if (widget_button.equals(intent.getaction())) toggleflashlight(); } private void turnon() { //mcamera = camera.open(); parameters params = mcamera.getparameters(); params.setflashmode(parameters.flash_mode_torch); mcamera.setparameters(params); mcamera.startpreview(); } private void turnoff() { //mcamera = camera.open(); parameters params = mcamera.getparameters(); params.setflashmode(parameters.flash_mode_off); mcamera.setparameters(params); mcamera.startpreview(); //mcamera = camera.open(); } public void toggleflashlight () { if (clicked){ clicked = false; turnon(); }else { clicked = true; turnoff(); } }
logcat:
03-24 20:40:07.583: d/androidruntime(11560): shutting down vm 03-24 20:40:07.583: w/dalvikvm(11560): threadid=1: thread exiting uncaught exception (group=0x41635d40) 03-24 20:40:07.586: e/androidruntime(11560): fatal exception: main 03-24 20:40:07.586: e/androidruntime(11560): process: com.quicksilver.flashlight, pid: 11560 03-24 20:40:07.586: e/androidruntime(11560): java.lang.runtimeexception: unable instantiate receiver com.quicksilver.flashlight.mywidgetprovider: java.lang.classnotfoundexception: didn't find class "com.quicksilver.flashlight.mywidgetprovider" on path: dexpathlist[[zip file "/data/app/com.quicksilver.flashlight-1.apk"],nativelibrarydirectories=[/data/app-lib/com.quicksilver.flashlight-1, /vendor/lib, /system/lib]] 03-24 20:40:07.586: e/androidruntime(11560): @ android.app.activitythread.handlereceiver(activitythread.java:2427) 03-24 20:40:07.586: e/androidruntime(11560): @ android.app.activitythread.access$1700(activitythread.java:139) 03-24 20:40:07.586: e/androidruntime(11560): @ android.app.activitythread$h.handlemessage(activitythread.java:1286) 03-24 20:40:07.586: e/androidruntime(11560): @ android.os.handler.dispatchmessage(handler.java:102) 03-24 20:40:07.586: e/androidruntime(11560): @ android.os.looper.loop(looper.java:136) 03-24 20:40:07.586: e/androidruntime(11560): @ android.app.activitythread.main(activitythread.java:5102) 03-24 20:40:07.586: e/androidruntime(11560): @ java.lang.reflect.method.invokenative(native method) 03-24 20:40:07.586: e/androidruntime(11560): @ java.lang.reflect.method.invoke(method.java:515) 03-24 20:40:07.586: e/androidruntime(11560): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:785) 03-24 20:40:07.586: e/androidruntime(11560): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:601) 03-24 20:40:07.586: e/androidruntime(11560): @ dalvik.system.nativestart.main(native method) 03-24 20:40:07.586: e/androidruntime(11560): caused by: java.lang.classnotfoundexception: didn't find class "com.quicksilver.flashlight.mywidgetprovider" on path: dexpathlist[[zip file "/data/app/com.quicksilver.flashlight-1.apk"],nativelibrarydirectories=[/data/app-lib/com.quicksilver.flashlight-1, /vendor/lib, /system/lib]] 03-24 20:40:07.586: e/androidruntime(11560): @ dalvik.system.basedexclassloader.findclass(basedexclassloader.java:56) 03-24 20:40:07.586: e/androidruntime(11560): @ java.lang.classloader.loadclass(classloader.java:497) 03-24 20:40:07.586: e/androidruntime(11560): @ java.lang.classloader.loadclass(classloader.java:457) 03-24 20:40:07.586: e/androidruntime(11560): @ android.app.activitythread.handlereceiver(activitythread.java:2422) 03-24 20:40:07.586: e/androidruntime(11560): ... 10 more 03-24 20:40:09.361: i/process(11560): sending signal. pid: 11560 sig: 9
so, have tons of material can work with. phone motorola moto g, , don't test on emulator because slow.
i hope find problem , solve because im getting bit frustrated.
thanks answers!
you should change following:
android:name="mywidgetprovider"
to
android:name="widget_switch"
in manifest.
per receiver tag documentation, name must match class's name in package.
Comments
Post a Comment