【问题标题】:FlashLight Widget Crash手电筒小部件崩溃
【发布时间】:2013-09-11 11:57:43
【问题描述】:

尝试为我的 Android 应用编写小部件。

onUpdate:

 @Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                     int[] appWidgetIds) {


    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
    Intent active = new Intent(context, Widget.class);
    active.setAction(ACTION_WIDGET_RECEIVER);
    active.putExtra("msg", "FLASHLIGHT");

    PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);

    remoteViews.setOnClickPendingIntent(R.id.widget_button, actionPendingIntent);
    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);

}

OnRecive:

@Override
public void onReceive(Context context, Intent intent) {
    String msg = "null";

    final String action = intent.getAction();
    if (ACTION_WIDGET_RECEIVER.equals(action)) {
        msg = intent.getStringExtra("msg");
        if (mCamera == null)
        {
            getCamera();
        }

            Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
        try
        {
            if(isFlashOn) { turnOffFlash(); }
            else { turnOnFlash(); }
        }
        catch (Exception e)
        {
            Log.e("ERROR --- > ",e.getMessage());
        }


    }
    super.onReceive(context, intent);

}


protected void turnOnFlash()
{
    params = mCamera.getParameters();
    params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
    mCamera.setParameters(params);
    isFlashOn = true;
}

protected void turnOffFlash()
{
    params = mCamera.getParameters();
    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
    mCamera.setParameters(params);
    isFlashOn = false;
}

private void getCamera() {
    if (mCamera == null) {
        try {
            mCamera = Camera.open();
            params = mCamera.getParameters();
        }
        catch (RuntimeException e) {
            Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
        }
    }

}

错误:

09-11 14:39:40.595 80-373/? E/QualcommCameraHardware:native_access_parm:错误(没有这样的文件或目录):fd 30,类型 1,长度 32,状态 0 09-11 14:39:46.255 6096-6096/net.testapp.flashlight E/相机错误。未能打开。错误::无法连接到相机服务 09-11 14:39:46.275 6096-6096/net.testapp.flashlight E/AndroidRuntime:致命例外:主要 java.lang.RuntimeException:无法启动接收器 net.testapp.flashlight.Widget:java.lang.NullPointerException:println 需要一条消息 在 android.app.ActivityThread.handleReceiver(ActivityThread.java:2510) 在 android.app.ActivityThread.access$1500(ActivityThread.java:153) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:5226) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.NullPointerException: println 需要一条消息 在 android.util.Log.println_native(本机方法) 在 android.util.Log.e(Log.java:231) 在 net.testapp.flashlight.Widget.onReceive(Widget.java:87) 在 android.app.ActivityThread.handleReceiver(ActivityThread.java:2503) ... 10 更多 09-11 14:39:48.715 80-6121/? E/mm-camera 8x-vfe:收到VFE Stop ACK!!! ctrlCmd 为 NULL 09-11 14:40:45.935 5820-5921/com.android.vending E/PlayEventLogger:上传失败的类 java.net.UnknownHostException(无法解析主机“play.googleapis.com”:没有与主机名关联的地址) 09-11 14:41:59.745 6131-6131/com.android.providers.calendar E/Trace:打开跟踪文件时出错:没有这样的文件或目录 (2) 09-11 14:42:01.265 6151-6151/com.cyanogenmod.lockclock E/Trace:打开跟踪文件时出错:没有这样的文件或目录 (2) 09-11 14:42:01.355 6165-6165/com.google.android.calendar E/Trace:打开跟踪文件时出错:没有这样的文件或目录 (2) 09-11 14:45:46.065 5820-5921/com.android.vending E/PlayEventLogger:上传失败的类 java.net.UnknownHostException(无法解析主机“play.googleapis.com”:没有与主机名关联的地址)

【问题讨论】:

  • 你是否在清单中添加了相机和接收器的权限
  • 我添加 和
  • 我的小部件上有 1 个按钮。我想打开和关闭手电筒。我该怎么做?也许还有其他方法?

标签: android widget led flashlight


【解决方案1】:

你需要使用一个服务,比如:

Public class widget extends service{

@Override
Public void onCreate{
    Super.on create();
}

@Override
Public void onStart {
    Super.onStart ();

    If(isFlashOn) {
//enter code to open camera and turn on flash
}else{
//enter code to release camera and turn off flash
      Stop self();
   }
}

@Override
Public void onDestroy {
      Super.on destroy();
}

@Override
Public Ibinder onBind {
      Return null;
}
}

【讨论】:

    【解决方案2】:

    删除“if (camera==null)”语句,只使用 getCamera();只是因为它的方法中已经有这个语句。

    另外,添加“mCamera.startPreview;”在 turnOnFlash 代码中并在 turnOffFlash 代码中停止预览

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多