admin管理员组

文章数量:1122852

Andriod

在上一篇文章Android-手电筒应用小思路(一)中提到的是独立手电筒App应用,然而第三方的手电筒应用是有缺陷的。因为如果让第三方手电筒app在后台亮,然后进入照相机,照相机是不能开启的。因为Camera是共享的硬件,但是不支持多个应用同时使用Camera,最起码,Android设计这块的初衷是这样的。

        所以就想针对这点做点什么,当然不能像小米系统自带的手电筒那么叼。但是我的做法也能让手电筒亮着,然后进照相机应用,而不会影响照相机的运行。当然我的做法只适合方案公司。

        其实我的想法比较简单,就是在进入照相机应用的时候,如果闪光灯亮着,就关闭手电筒。要做的这一点,我把手电筒写在Camera里面,这样就可以在Camera应用中获得手电筒应用的Activity的对象实例,从而更好的控制两者之间使用Camera 硬件的情况。当然你也许会说,通过广播来发送相关的信息,当然也是可以,但那时广播有时候也是会延迟的,所以会存在弊端。

        既然要将手电筒放在Camera应用里面就要修改Camera应用。首先在其中增加Android-手电筒应用小思路(一)中所写的TorchActivity.java。然后修改其配置文件,增加下列代码:

<activityandroid:name="com.android.camera.TorchActivity" android:label="@string/torch_title"android:screenOrientation="portrait"android:clearTaskOnLaunch="true"></activity><activity-aliasandroid:name="com.android.camera.TorchLauncher"android:icon="@mipmap/ic_launcher_torch"android:label="@string/torch_title"android:targetActivity="com.android.camera.TorchActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>   </activity-alias>

然后修改TorchActivity.java,增加下面代码:

	  ...
public static TorchActivity mInstance;...
public static TorchActivity getInstance(){return mInstance;
}

再修改CameraActivity.java,在onCreate()和onResume()增加下面代码:

 public void onCreate(Bundle state) {if(TorchActivity.getInstance()!= null && TorchActivity.getInstance().torchstate){TorchActivity.getInstance().releaseTorch();TorchActivity.getInstance().finish();}...}public void onResume() {if(TorchActivity.getInstance()!= null && TorchActivity.getInstance().torchstate){TorchActivity.getInstance().releaseTorch();TorchActivity.getInstance().finish();}...}

重新编译Camera 然后push到手机后,你会发现,Launcher上有了手电筒的图标,这也就是一个应用两个ICON图标,充分利用activity-alias。

本文标签: Andriod