2014-03-24 37 views
0

第一:我是Newby。所以,如果这是一个令人惊讶的简单解决方案,请不要骚扰我。Button创建时Widget崩溃

我是新的部件,我想开始做他们。其实是一个手电筒程序。

问题是:我可以创建一个Widget,但是当我甚至只是在布局文件中声明一个按钮时,这个Widget会崩溃,唯一能看到的就是“Fehler”(德文中的“Error”)。

下面是XML文件:

<?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> 

布局文件是:

<?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> 

清单的接收器部分是:

<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> 

和Java文件,该文件与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 with 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 to 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): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2427) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at android.app.ActivityThread.access$1700(ActivityThread.java:139) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1286) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at android.os.Handler.dispatchMessage(Handler.java:102) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at android.os.Looper.loop(Looper.java:136) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at android.app.ActivityThread.main(ActivityThread.java:5102) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at java.lang.reflect.Method.invokeNative(Native Method) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at java.lang.reflect.Method.invoke(Method.java:515) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at 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): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at java.lang.ClassLoader.loadClass(ClassLoader.java:457) 
03-24 20:40:07.586: E/AndroidRuntime(11560): at 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 

所以,你必须吨的材料,你可以工作。这款手机是摩托罗拉Moto G,我不会在模拟器上测试它,因为它太慢了。

我希望你会发现问题并解决它,因为我有点沮丧。

谢谢解答!

回答

0

(其实原来的岗位被删除。)

如果重拍的文件,并选择一个按钮根元素它的工作原理。

它在按下时没有响应,但属于不同的问题。

0

您应该更改如下:

android:name="MyWidgetProvider" 

android:name="widget_switch" 

在清单中。

receiver tag documentation,该名称必须与封装类的名称相匹配。

+0

Sry基因仍然不工作,我只是做了它reziseable及其全文似乎是:在加载过程 – MCocktail

+0

错误所以异常现在不一样了,当您试图运行呢?你可以请张贴吗? – BVB

+0

日志猫表示:03-28 21:57:03.194:I /肾上腺EGL(9130)::EGL 1.4 QUALCOMM构建:(N/A) 03-28 21:57:03.194:我/肾上腺EGL(9130):OpenGL ES的着色器编译器版本:E031.24.00.00 03-28 21:57:03.194:I /肾上腺EGL(9130):建造日期:11/12/13星期二 03- 28 21:57:03.194:I /肾上腺EGL(9130):本地分公司: 03-28 21:57:03.194:I /肾上腺EGL(9130):远程分公司: 03-28 21:57:03.194 :I/Adreno-EGL(9130):本地修补程序: 03-28 21:57:03。194:我/ Adreno-EGL(9130):重建分支: 03-28 21:57:03.272:D/OpenGLRenderer(9130):启用调试模式0 – MCocktail