我正在使用Widget开发Flashlight应用.
当我打开Widget手电筒的手电筒时,并且当我启动某些应用程序时,手电筒将关闭.
为什么会这样呢?为什么我的手电筒无法在后台运行?
我该如何预防?我希望仅由用户而不是系统关闭手电筒.
这是我的小部件代码:
@OverrIDe public voID onReceive(Context context, Intent intent) { RemoteVIEws vIEws = new RemoteVIEws(context.getPackagename(), R.layout.Widget_layout); myPref = PreferenceManager.getDefaultSharedPreferences(context); if (AppGlobals.getIsFlashOn()) { vIEws.setimageVIEwResource(R.ID.flashlight_Widget_imagevIEw, R.drawable.light_on); } else { vIEws.setimageVIEwResource(R.ID.flashlight_Widget_imagevIEw, R.drawable.light_off); } AppWidgetManager appWidgetManager = AppWidgetManager .getInstance(context); appWidgetManager.updateAppWidget(new Componentname(context, FlashlightWidgetProvIDer.class), vIEws); if (AppGlobals.getIsFlashOn()) { if (getmCameraWidget() != null) { flashOffWidget(); } if (Flashlight.getmCameraActivity() != null) { flashOffApp(); Flashlight.flashlight_button .setBackgroundResource(R.drawable.light_on); } Flashlight.turnMotorolaOff(); islightOn = false; NotifyFlashlight(context, islightOn); } else { try { setmCameraWidget(Camera.open()); } catch (Exception e) { e.printstacktrace(); } if (getmCameraWidget() == null) { } else { setParamsWidget(getmCameraWidget().getParameters()); List<String> flashModes = getParamsWidget() .getSupportedFlashModes(); if (flashModes == null) { return; } else { if (count == 0) { getParamsWidget().setFlashMode( Parameters.FLASH_MODE_OFF); getmCameraWidget().setParameters(getParamsWidget()); getmCameraWidget().startPrevIEw(); AppGlobals.setIsFlashOn(true); } String flashMode = getParamsWidget().getFlashMode(); if (!Parameters.FLASH_MODE_TORCH.equals(flashMode)) { if (flashModes.contains(Parameters.FLASH_MODE_TORCH)) { getParamsWidget().setFlashMode( Parameters.FLASH_MODE_TORCH); getmCameraWidget().setParameters(getParamsWidget()); } else { getParamsWidget().setFlashMode( Parameters.FLASH_MODE_ON); getmCameraWidget().setParameters(getParamsWidget()); try { getmCameraWidget().autoFocus( new autoFocusCallback() { public voID onautoFocus( boolean success, Camera camera) { count = 1; } }); } catch (Exception e) { e.printstacktrace(); } } AppGlobals.setIsFlashOn(true); islightOn = true; NotifyFlashlight(context, islightOn); } } } Flashlight.turnMotorolaOn(); } } private voID flashOffApp() { Flashlight.getmCameraActivity().stopPrevIEw(); Flashlight.getmCameraActivity().release(); Flashlight.setmCameraActivity(null); AppGlobals.setIsFlashOn(true); count = 0; } private voID flashOffWidget() { FlashlightWidgetReceiver.getmCameraWidget().stopPrevIEw(); FlashlightWidgetReceiver.getmCameraWidget().release(); FlashlightWidgetReceiver.setmCameraWidget(null); AppGlobals.setIsFlashOn(false); count = 0; } public static Camera getmCameraWidget() { return mCameraWidget; } public static voID setmCameraWidget(Camera mCameraWidget) { FlashlightWidgetReceiver.mCameraWidget = mCameraWidget; } public static Parameters getParamsWidget() { return paramsWidget; } public static voID setParamsWidget(Parameters paramsWidgetSet) { paramsWidget = paramsWidgetSet; } }}
解决方法:
这是在后台运行Falsh的全部代码.您需要将代码放入服务中的所有内容.然后从您的主要活动开始您的服务.
这是服务类:
public class ServiceFlash extends Service {private boolean isFlashOn = false;private Camera camera;Context context ;PackageManager pm;@OverrIDepublic voID onCreate() { // Todo auto-generated method stub context = getApplicationContext(); super.onCreate();}@OverrIDepublic int onStartCommand(Intent intent, int flags, int startID) { // Todo auto-generated method stub pm = context.getPackageManager(); if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { Log.e("err", "Device has no camera!"); Toast.makeText(getApplicationContext(), "Your device doesn't have camera!", Toast.LENGTH_SHORT) .show(); return 0; } camera = Camera.open(); final Parameters p = camera.getParameters(); // turn flash on if (isFlashOn) { Log.i("info", "torch is turned off!"); p.setFlashMode(Parameters.FLASH_MODE_OFF); camera.setParameters(p); isFlashOn = false; } else { Log.i("info", "torch is turned on!"); p.setFlashMode(Parameters.FLASH_MODE_TORCH); camera.setParameters(p); isFlashOn = true; } return super.onStartCommand(intent, flags, startID);}@OverrIDepublic IBinder onBind(Intent intent) { // Todo auto-generated method stub return null;}
不要忘记将其添加到清单中:
<service androID:name=".ServiceFlash" androID:exported="false"/>
您的活动可能是这样的:
公共类AppActivity扩展了Activity {
private boolean isFlashOn = false;
私人相机相机;
私人按钮按钮;
@OverrIDeprotected voID onStop() { super.onStop(); if (camera != null) { camera.release(); }}@OverrIDeprotected voID onPause() { // Todo auto-generated method stub super.onPause();}@OverrIDepublic voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); Intent front_translucent = new Intent(this, ServiceFlash.class); startService(front_translucent);}
}
您可以从这样的小部件类启动服务(尝试将代码放入小部件类的onReceive方法中):
// Create intent Intent serviceIntent = new Intent(context, mService.class);// start service context.startService(serviceIntent);
请享用..!
总结以上是内存溢出为你收集整理的启动其他应用程序时手电筒关闭. Android的全部内容,希望文章能够帮你解决启动其他应用程序时手电筒关闭. Android的所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)