Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / Фонарик с исходниками / 11 сообщений из 11, страница 1 из 1
01.12.2015, 09:59
    #39116996
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фонарик с исходниками
скачатьwadman.ru/apk/smalllight.apk


Маленький, легкий, шустрый и работает если не на всех, то на большинстве моделей. В крайнем случае пытается эмулировать подсветку экраном.
Функционал задавал следующий: запустил фонарик (вспышка работает), заблокировал телефон (вспышка погасла), когда нужен фонарик - разблокировал (вспышка работает). То есть чтоб работал по физической кнопке.

Исходник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
package ru.wadman.smalllight;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.RelativeLayout;

import java.io.IOException;

public class MyActivity extends Activity implements SurfaceHolder.Callback, View.OnClickListener {

    private final static String SETTING_NAME = "default";
    private final static String SETTING_FLASH = "isFlash";

    private SurfaceHolder mHolder;
    private Camera mCamera = null;
    private SurfaceView mPreview;
    private boolean isFlashMode = true;
    private boolean isFlashAvail = false;
    private float mBrightness;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        RelativeLayout layout = (RelativeLayout)findViewById(R.id.back);
        layout.setOnClickListener(this);
        mBrightness = getScreenBrightness();
        isFlashAvail = getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
        isFlashMode = getSharedPreferences(SETTING_NAME, Context.MODE_PRIVATE).getBoolean(SETTING_FLASH, isFlashMode) & isFlashAvail;
        mPreview = (SurfaceView) findViewById(R.id.surfaceView);
        if (isFlashAvail) {
            mHolder = mPreview.getHolder();
            mHolder.addCallback(this);
            mCamera = Camera.open();
            try {
                mCamera.setPreviewDisplay(mHolder);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        turnFlashOn();
    }

    private float getScreenBrightness() {
        return getWindow().getAttributes().screenBrightness;
    }

    private void setScreenBrightness(float brightness) {
        WindowManager.LayoutParams layout = getWindow().getAttributes();
        layout.screenBrightness = brightness;
        getWindow().setAttributes(layout);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        if (isFlashAvail) {
            mHolder = holder;
            try {
                mCamera.setPreviewDisplay(mHolder);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        if (isFlashAvail) {
            mCamera.stopPreview();
            mHolder = null;
        }
    }

    private void turnFlashOn() {
        if (isFlashMode) {
            Camera.Parameters params = mCamera.getParameters();
            params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            mCamera.setParameters(params);
            mCamera.startPreview();
        } else {
            mPreview.getRootView().setBackgroundColor(Color.WHITE);
            setScreenBrightness(1);
        }
    }

    private void turnFlashOff() {
        if (isFlashMode) {
            Camera.Parameters params = mCamera.getParameters();
            params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            mCamera.setParameters(params);
            mCamera.stopPreview();
        } else {
            mPreview.getRootView().setBackgroundColor(Color.BLACK);
            setScreenBrightness(mBrightness);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        turnFlashOff();
    }

    @Override
    protected void onResume() {
        super.onResume();
        turnFlashOn();
    }

    @Override
    protected void onDestroy() {
        turnFlashOff();
        if (mCamera != null) {
            mCamera.release();
        }
        final SharedPreferences.Editor editor = getSharedPreferences(SETTING_NAME, Context.MODE_PRIVATE).edit();
        editor.putBoolean(SETTING_FLASH, isFlashMode);
        editor.apply();
        super.onDestroy();
    }

    @Override
    public void onClick(View v) {
        if (isFlashAvail) {
            turnFlashOff();
            isFlashMode = !isFlashMode;
            turnFlashOn();
        }
    }
}

...
Рейтинг: 0 / 0
02.12.2015, 23:22
    #39118852
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фонарик с исходниками
wadman,
а для новых api?
...
Рейтинг: 0 / 0
03.12.2015, 09:05
    #39118970
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фонарик с исходниками
вадяа для новых api?
Вообще это писалось под себя года два назад. Выложил в качестве примера.
Да и новые апи пока не в топе http://developer.android.com/intl/ru/about/dashboards/index.html#Platform
Более того, новые апи даже не все производители встраивают в андроиды 5.1 и выше.
То есть наличие свежей версии андроида не гарантирует наличия нового апи.

П.С. Камера тут для кривого самсунга, который без нее не дает на некоторых девайсах включать вспышку. :)
...
Рейтинг: 0 / 0
03.12.2015, 23:33
    #39120004
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фонарик с исходниками
wadman,
у меня есть работающая вещь для распознавания qr кодов, но с новыми api куча деприкайтов, хотя работает на 5.1.1, мне не требуется распространения на любое железо, да и подучиться под новое.. надо что-то почитать на русском , примеры....
...
Рейтинг: 0 / 0
04.12.2015, 09:14
    #39120129
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фонарик с исходниками
вадяу меня есть работающая вещь для распознавания qr кодов, но с новыми api куча деприкайтов, хотя работает на 5.1.1
И на шестерке будет работать. Гугловцы с таким подходом производителей знакомы и потому еще долго не откажутся от поддержки старых api.
...
Рейтинг: 0 / 0
04.12.2015, 09:38
    #39120145
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фонарик с исходниками
wadmanвадяу меня есть работающая вещь для распознавания qr кодов, но с новыми api куча деприкайтов, хотя работает на 5.1.1
И на шестерке будет работать. Гугловцы с таким подходом производителей знакомы и потому еще долго не откажутся от поддержки старых api.

неа, а вот с 6-кой не факт из-за новой системы разрешений.
...
Рейтинг: 0 / 0
04.12.2015, 09:52
    #39120152
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фонарик с исходниками
Джибсwadmanпропущено...

И на шестерке будет работать. Гугловцы с таким подходом производителей знакомы и потому еще долго не откажутся от поддержки старых api.

неа, а вот с 6-кой не факт из-за новой системы разрешений.
Я имел в виду конкретно камеру, а разрешения не новые, а "хорошо забытые старые" - AppOps допиленный, который api не касается.
...
Рейтинг: 0 / 0
04.12.2015, 10:12
    #39120163
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фонарик с исходниками
wadmanДжибспропущено...


неа, а вот с 6-кой не факт из-за новой системы разрешений.
Я имел в виду конкретно камеру, а разрешения не новые, а "хорошо забытые старые" - AppOps допиленный, который api не касается.

а у меня там локейшены не работали, пока я не воткнул новый функционал из 6-ки для запроса разрешений.
...
Рейтинг: 0 / 0
04.12.2015, 10:25
    #39120177
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фонарик с исходниками
Джибсwadmanпропущено...

Я имел в виду конкретно камеру, а разрешения не новые, а "хорошо забытые старые" - AppOps допиленный, который api не касается.

а у меня там локейшены не работали, пока я не воткнул новый функционал из 6-ки для запроса разрешений.
Дак это новый api, а мы про depricated. :)
...
Рейтинг: 0 / 0
04.12.2015, 11:25
    #39120257
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фонарик с исходниками
wadmanДжибспропущено...


а у меня там локейшены не работали, пока я не воткнул новый функционал из 6-ки для запроса разрешений.
Дак это новый api, а мы про depricated. :)

Понятно, в моем случае, там вроде как не было устаревших вещей.
...
Рейтинг: 0 / 0
04.12.2015, 12:02
    #39120318
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фонарик с исходниками
что будет работать я не сомневаюсь, но хочется и новое попробовать
раз есть железо с 5.1.1
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / Фонарик с исходниками / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]