Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
wichujanin
1 / 1 / 0
Регистрация: 06.03.2014
Сообщений: 7
#1

Выполнений действий в фоне - Android

02.04.2014, 19:21. Просмотров 898. Ответов 2
Метки нет (Все метки)

Всем привет!
Есть работающий исходник:
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
    public void PrtSc()
    {
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) 
        {
            File sdCard = Environment.getExternalStorageDirectory();
            File directory = new File(sdCard.getAbsolutePath() + "/ScreenShots");
            directory.mkdirs();
            int i = 0;
            String filename;
            File yourFile;
            do {
                i++;
                filename = "screenshot" + i + ".jpg";
                yourFile = new File(directory, filename);
            } while (yourFile.exists());
            Bitmap bitmap;
            View view = getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
            view.setDrawingCacheEnabled(true);
            bitmap = Bitmap.createBitmap(view.getDrawingCache());
            view.setDrawingCacheEnabled(false); 
            OutputStream fileOut = null;
            try {
                fileOut = new FileOutputStream(yourFile);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 50, fileOut);
                fileOut.flush();
                fileOut.close();
            } 
            catch (FileNotFoundException e){
                e.printStackTrace();
            }       
            catch (IOException e){
                e.printStackTrace();
            }   
        }       
    }
.........................................
        OnClickListener oclBtn1 =  new OnClickListener(){
 
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Edit.setText("Нажата кнопка Ок");
                PrtSc();
            }
        };
        
        myBtn1.setOnClickListener(oclBtn1);
При нажатии на кнопку ок делается скриншот и сохраняется в файл, каждый скриншот под уникальным именем.
Как сделать приложение без интерфейса, чтобы при запуске скриншоты делались в фоне?
Как автозапуск делать нашел:
XML
1
2
3
4
<receiver android:name=".onBootReceiver" android:enabled="true" android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
Помогите плиз, под андроид только недавно пробую писать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2014, 19:21     Выполнений действий в фоне
Посмотрите здесь:

Маленькое изображение на фоне большого Android
Android Прозрачные кружки на полупрозрачном фоне
Приложение в фоне, трее Android
Уведомление в фоне Android
Android Рисование на фоне основного Layout-а, возможно ли?
Android Сворачивание приложений и работа в фоне (service)
Создание радио приложения которое будет продолжать играть в фоне Android
Android Меню выбора на фоне запущенной камеры при старте приложения?
Android Использование микрофона в фоне
Работа в фоне. Отобразить картинку по url Android
Повторение операции в фоне Android
Android Приём сообщений от сервера в фоне

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
 Аватар для YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
02.04.2014, 19:25     Выполнений действий в фоне #2
wichujanin, http://habrahabr.ru/post/149875/

http://developer.alexanderklimov.ru/.../broadcast.php

Описываете свой ресивер в xml

Java
1
2
3
4
<receiver android:name=".onBootReceiver" android:enabled="true" android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
делаете класс-наследник

Java
1
2
3
4
5
class onBootReceiver extends BroadcastReceiver {
onReceive(Context context, Intent intent) {
//Телефон загрузился
}
}
wichujanin
1 / 1 / 0
Регистрация: 06.03.2014
Сообщений: 7
03.04.2014, 00:07  [ТС]     Выполнений действий в фоне #3
Спасибо за ответ, вникаю в статью...
Знающие люди, помогите плиз с каркасом такого приложения, там кода то немного... который день уже с этим бъюсь безрезультатно, много мануалов по сервисам и т.д. для новичка такого как я они сложные
Не сочтите за наглость, буду очень рад исходнику каркаса + манифесту и т.д. Знаю что такое не очень приветствуется, но мне бы очень помог рабочий исходник.
Нужно приложение без визуальных элементов, чтобы при запуске устанавливалось, при перезагрузке автозагружалось. Сам пишу на си, под Windows я бы в такой задаче перехватывал щелчок мыши и колесо прокрутки, получал бы системное время, после каждого вызова PrtSc() сделал бы проверку, чтобы скриншоты делались не чаще 2000 миллисекунд, чтобы ресурсы сильно не расходовать.
Под андроид только пробую писать, как можно тут это красиво реализовать?
После прочтения статьи на ум приходит обрабатывать ACTiON_SCREEN_ON и делать скриншоты с интервалом, как можно сделать лучше?

Добавлено через 3 часа 51 минуту
Хочу внутри сервиса выполнять свою функцию через определенный период.

Взял исходник из примера сервиса, дописал свою функцию, нажал Ctrl + Shift + O:
Код
package org.divenvrsk.examples.service;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class RepeatingAlarmService extends BroadcastReceiver {

    public void PrtSc()
    {
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) 
        {
            File sdCard = Environment.getExternalStorageDirectory();
            File directory = new File(sdCard.getAbsolutePath() + "/ScreenShots");
            directory.mkdirs();
            int i = 0;
            String filename;
            File yourFile;
            do {
                i++;
                filename = "screenshot" + i + ".jpg";
                yourFile = new File(directory, filename);
            } while (yourFile.exists());
            Bitmap bitmap;
//Ошибка тут:                                !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            View view = getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
            view.setDrawingCacheEnabled(true);
            bitmap = Bitmap.createBitmap(view.getDrawingCache());
            view.setDrawingCacheEnabled(false); 
            OutputStream fileOut = null;
            try {
                fileOut = new FileOutputStream(yourFile);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 50, fileOut);
                fileOut.flush();
                fileOut.close();
            } 
            catch (FileNotFoundException e){
                e.printStackTrace();
            }        
            catch (IOException e){
                e.printStackTrace();
            }    
        }        
    }
    
    @Override
    public void onReceive(Context context, Intent intent) {
     PrtSc();
        Toast.makeText(context, "It's Service Time!", Toast.LENGTH_LONG).show();
        Log.v(this.getClass().getName(), "Timed alarm onReceive() started at time: " + new java.sql.Timestamp(System.currentTimeMillis()).toString());
    }
}
Код
package org.divenvrsk.examples.service;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class OnBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
            Intent serviceLauncher = new Intent(context, ServiceExample.class);
            context.startService(serviceLauncher);
            Log.v(this.getClass().getName(), "Service loaded while device boot.");
        }
    }
}
Код
package org.divenvrsk.examples.service;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class ServiceActivity extends Activity implements View.OnClickListener {

    Button buttonStart, buttonStop;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        buttonStart = (Button) findViewById(R.id.buttonStart);
        buttonStop = (Button) findViewById(R.id.buttonStop);

        buttonStart.setOnClickListener(this);
        buttonStop.setOnClickListener(this);
    }

    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.buttonStart:
                Log.v(this.getClass().getName(), "onClick: Starting service.");
                startService(new Intent(this, ServiceExample.class));
                break;
            case R.id.buttonStop:
                Log.v(this.getClass().getName(), "onClick: Stopping service.");
                stopService(new Intent(this, ServiceExample.class));
                break;
        }
    }
}
Код
package org.divenvrsk.examples.service;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;
import android.util.Log;
import android.widget.Toast;

public class ServiceExample extends Service {

    public static final int INTERVAL = 10000; // 10 sec
    public static final int FIRST_RUN = 5000; // 5 seconds
    int REQUEST_CODE = 11223344;

    AlarmManager alarmManager;

    @Override
    public void onCreate() {
        super.onCreate();

        startService();
        Log.v(this.getClass().getName(), "onCreate(..)");
    }

    @Override
    public IBinder onBind(Intent intent) {
        Log.v(this.getClass().getName(), "onBind(..)");
        return null;
    }

    @Override
    public void onDestroy() {
        if (alarmManager != null) {
            Intent intent = new Intent(this, RepeatingAlarmService.class);
            alarmManager.cancel(PendingIntent.getBroadcast(this, REQUEST_CODE, intent, 0));
        }
        Toast.makeText(this, "Service Stopped!", Toast.LENGTH_LONG).show();
        Log.v(this.getClass().getName(), "Service onDestroy(). Stop AlarmManager at " + new java.sql.Timestamp(System.currentTimeMillis()).toString());
    }

    private void startService() {

        Intent intent = new Intent(this, RepeatingAlarmService.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, REQUEST_CODE, intent, 0);

        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.setRepeating(
                AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime() + FIRST_RUN,
                INTERVAL,
                pendingIntent);

        Toast.makeText(this, "Service Started.", Toast.LENGTH_LONG).show();
        Log.v(this.getClass().getName(), "AlarmManger started at " + new java.sql.Timestamp(System.currentTimeMillis()).toString());
    }
}
Где:
View view = getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
getWindow подчеркивается красным, ошибка: The method getWindow() is undefined for the type RepeatingAlarmService
Как испарвить?
Yandex
Объявления
03.04.2014, 00:07     Выполнений действий в фоне
Ответ Создать тему
Опции темы

Текущее время: 18:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru