Andriod-手電筒應用小思路(二)
阿新 • • 發佈:2019-02-04
在上一篇文章Android-手電筒應用小思路(一)中提到的是獨立手電筒App應用,然而第三方的手電筒應用是有缺陷的。因為如果讓第三方手電筒app在後臺亮,然後進入照相機,照相機是不能開啟的。因為Camera是共享的硬體,但是不支援多個應用同時使用Camera,最起碼,Android設計這塊的初衷是這樣的。
所以就想針對這點做點什麼,當然不能像小米系統自帶的手電筒那麼叼。但是我的做法也能讓手電筒亮著,然後進照相機應用,而不會影響照相機的執行。當然我的做法只適合方案公司。
其實我的想法比較簡單,就是在進入照相機應用的時候,如果閃光燈亮著,就關閉手電筒。要做的這一點,我把手電筒寫在Camera裡面,這樣就可以在Camera應用中獲得手電筒應用的Activity的物件例項,從而更好的控制兩者之間使用Camera 硬體的情況。當然你也許會說,通過廣播來發送相關的資訊,當然也是可以,但那時廣播有時候也是會延遲的,所以會存在弊端。
既然要將手電筒放在Camera應用裡面就要修改Camera應用。首先在其中增加Android-手電筒應用小思路(一)中所寫的TorchActivity.java。然後修改其配置檔案,增加下列程式碼:
<activity android:name="com.android.camera.TorchActivity" android:label="@string/torch_title" android:screenOrientation="portrait" android:clearTaskOnLaunch="true" > </activity> <activity-alias android: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。