Сегодня ComputerWorld опубликовал такую штуку, от которой лично у меня до сих пор волосы дыбом!

Они пишут что компания Google сохраняет за собой право дистанционно удалять программы со смартфонов пользователей , если в этих программах нарушается договор разработчика на распространение приложений. На языке оригинала это звучит так:

Google may discover a product that violates the developer distribution agreement … in such an instance, Google retains the right to remotely remove those applications from your device at its sole discretion

Ну ничего себе они мне такое рассказывают! Как пользователь я бы очень не хотел чтобы “Большой Брат” сидел в моем телефоне и следил за тем как, когда и зачем я использую установленное ПО. И к тому же все это на “открытой платформе Android“. Ну надо же было так испоганить идею.

Напомню что подобная возможность, называемая “Remote Kill Switch”, ранее была обнаружена в телефонах Apple iPhone, что вызвало недовольство со стороны пользователей, обеспокоенных ущемлением их прав.

Вместе с тем, Google обещает что будет стараться вернуть деньги пользователю за удаленное ПО:

In addition, Google says that if it does remotely remove an application, it will try to get users their money back

Классно! Всю жизнь мечтал. Google именно “будет стараться”, никаких гарантий. Описание подобных “стараний” найти не удалось.

Как разработчика меня, возможно, устроил бы вариант с удалением пиратских копий моего ПО, но возврат денежек за пиратскую копию как-то… не радует.

Вот так из хорошего получается странное… А в том, как же это работает, нужно будет еще разобраться.

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

This post has 5 Comments

5
  1. да есть такая тема. однако, думается мне что это немного не то, что вшито в айфон.

    гугл утверждает, что удалять он будет (кстати он лишь оставляет право, но удалять, думаю, будет только в крайнем случае) не те программы, которые он хочет, а именно те которые нарушают соглашение android market. темболее гугл утверждает что будет возвращать затраченные пользователем средства на эту софтину.

    я представляю себе это так:
    написал чувачёк програмульку типа “блокнот”, привязал к ней какойнить руткит и выложил в android market. прогу купило какоето количество пиплов и тут гугле обнаруживает, что в проге сидит руткит. “отзывает” эту софтину и возврашает деньги.

    в то время как apple убивала софт без объяснения причин и без явных нарушений каких-либо договоров.

    итого

    причина гугле – забота о безопасности юзеров.

    причина аппле – забота о своём кошельке.


    с одной стороны можно сказать, что я предвзято отношусь к гугле считая их вселенским добром, а аппле считая злым деньгозарабатователем. однако, за аппле уже были грешки, а вот за гуглом не наблюдал.

    как-то так.

  2. Вот нашел оригинальный текст Android Market Policies… Ну, не смертельно, но там все далеко не так радужно как хотелось бы..
    Еще и эта штука с возвратом в течении суток… Например возврат какого-нибудь твикера, который раз всего в течении жизни смартфона будет использоваться, может оказаться очень неприятным для разработчиков.
    Как-то участвовал в бета-тестировании твикера для смартфонов и получил от компании-разработчика лицензию в качестве благодарности за тестирование, так вот, пользовался я им всего один раз, и больше как-то смысла не вижу, ОС я на смартфоне не перустанавливаю, пожтому он мне как бы и не нужен. С возвратом в течении суток такой класс утилит потенциально теряет привлекательность для разработчиков…
    Но это, в общем-то, тема уже совсем другой истории.. 🙂

  3. О, спасибо. Интересный линк, полистаем.

    Я думаю что это первое время народ будет озадачен, а потом как разберётся что к чему всё встанет на свои места.

    а что за твикер?

    я сейчас пытаюсь придумать какое такое приложение нужно что бы запустить его 1 раз и больше его плодами не пользоваться и что-то в голову ничего не лезет.

  4. Насчет утилит-твикеров – ну почему же они потеряют привлекательность.. Отнюдь нет, можно лишь чуть по-другому их оформить. Например, если утилита при деинсталляции будет откатывать все сделанные изменения – тогда все становится на свои места. Ты пробуешь твикер, если не понравилось – в течение суток возвражаешь его назад, вместе с плодами его работы. А если понравилось – то просто оставляешь его в смартфоне, вместе с плодами усилий.

Leave a Reply

Your email address will not be published. Required fields are marked *

У.

Установка Android SDK 1.0 на HTC Touch/Vogue

Давно уже пора счастливым обладателям ряда телефонов от HTC (в частности на процессорах MSM7500, к примеру Touch) начать наслаждаться прелестями Андроида не в эмуляторах, а буквально в своих руках — на экранах своих же телефонов. Как? Совершенно не сложно!

Основную работу по портировании андроида на плафторму в данный момент ведет вот этот товарищ. На его же странице можно скачать архив с последней сборкой Андроида (а инструкции по установке читайте чуть ниже).
Еще один вариант — скачать установочный .cab файл вот с этой страницы. Тут все просто — запустили файл и готово. Далее андроид запускается из Start->Programs->harret. Минусы этого варианта — каб файл собирается из того, что выкладывают по предыдущей ссылки — что частенько является свежее и стабильнее.

Оба метода установки абсолютно безопасны для вашей Windows Mobile 6.1 и текущих данных на телефоне, так что можете спокойно проводить эксперименты. Основное требование — 256 мб свободного места на карточке после копирования файлов.

Установка вручную:

  • Скачать http://it029000.massey.ac.nz/vogue/android-new.zip раззипить.
  • Разархировать вручную все три .gz файла (initrd.gz, system.gz и data.gz). Удалите оставшиеся *.gz файлы.
  • В итоге мы получим initrd, system.img, data.img
  • В файле default.txt поменять «initrd.gz» на «initrd»
  • Как-нибудь скопируйте все получившиеся файлы с компьютера в корневую директорию SD карточки (к примеру через Bluetooth)
  • Запускайте андроид — SDCard/harret.exe, и жмите Run.

Телефоны работающие с этой сборкой:
Несколько моделей от HTC, работающие на процессоре MSM7500:
HTC Libra 100: HTC S720, HTC 5800, Verizon SMT5800 / XV5800,
HTC Titan 100: Verizon XV6800, HTC/PPC 6800, HTC P4000
HTC Vogue 100: HTC Touch P3050
HTC Vogue: Verizon Touch XV6900
HTC Iris 100: HTC S640
HTC Touch Diamond

(информация с www.pdadb.net)
Нет гарантии что на этих телефонах эта сборка андроида заведется — она заточена именно под Vogue, но попробывать определенно стоит.
Для менее удачливых обладателей HTC Elf (он же европейский Touch с процессором OMAP850) обладающих базовыми знаниями ARM Linux — проходите, читайте, пробуйте 🙂

Что в итоге можно получить:
Вполне себе работающую систему, очень похожую на то что показывали нам в видео о G1.

Maps — полноценный гугл мапс. Довольно отполированный — я не нашел никаких недочетов. Разве что у моего не было street view. В остальном — отменно работает. Пользоваться, лично мне, приятнее чем на браузером айфона — нет необходимости двумя пальцами менять зум 🙂 А еще режим My Location показывает точечку какую-то в Поло Альто, она на тот момент ехала по дороге. Интересно — чья-то жизнь!

Браузер — очень приятно пользоваться. Шустрый, с классным и функциональным зумом, интересными находками в интерфейсе. Действительно приятные эффекты. Поддержка большого количества окошек–табов (имплементация примерно как в мобайл-сафари).
В принципе нареканий нет. Странички типа главной Лепры (большая и тяжеленная страница с кучей больших картинок) не тормозят, плавно скролятся по движению пальцем, зумятся, и так далее. Интернетом пользоваться приятно и интересно!

Оно посылает смски, они доходят — ура!

В моей сборке что–то не так с извещениями. К примеру, приходит смска — включается вибрация и больше ее не выключишь кроме как перезагрузкой. То же самое с входящими звонками. Всё исходящее — работает нормально. Звуки тоже, так что проблема именно в вибрации не вызванной напрямую пользователем.

Так же у меня там были установлены следующие приложения: камера (как в эмуляторе, так же не работает), калькулятор, ssh клиент (ура!), девелоперская информация и настройки, глобус с тенью ползущей, будильник (очень классный, с разными «скинами»), аудио плеер, смотрелка картинок.

Так как почему–то не работает sd карточка (странно!) — музыку и смотрелку картинок тестировать нечем.

Из глюков — тач–клавиутура выглядит не очень (но пользоваться вполне можно) и вибрирует при нажатии на кнопочки, что довольно странно и уверен будет очень скоро исправлено. Шрифты не всегда помещаются на кнопочки. Ну а кроме того что описал выше — особых багов в системе пока не заметил.

Еще тут говорят что на эту сборку можно ставить приложения без особых проблем — а их в сети уже буквально сотни и сотни.

Взято с хабра

A.

ActionBarSherlock – Удобная реализация UI-паттерна ActionBar для Android-приложений – Часть I

Что-то пауза с постами у нас получается совсем нечеловеческая. Попробуем еще разок возобновить публикации.
И сегодня мы познакомимся с библиотекой, реализующей UI-паттерн Action Bar для Android-приложений.

Разработчики библиотеки позиционируют ее как расширение к Compatibility Library, которое для создания ActionBar использует нативную реализацию, если это поддерживается системой, или же вручную дублирует нужный функционал.

Библиотека является open-source проектом и доступна для загрузки на GitHub.

Начало

Начать пользоваться библиотекой довольно просто. Нужно сделать вот что:

  • Унаследовать активити от SherlockActivity (или SherlockListActivity)
  • Переопределить метод onCreateOptionsMenu() и в нем заполнить объект Menu информацией о кнопках
  • В onCreate() или в манифесте указать что используется тема Theme_Sherlock

В итоге код получится приблизительно таким:

package ru.mobiledeveloper.actionbarsherlocktest;

import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;

import android.os.Bundle;
import ru.mobiledeveloper.actionbarsherlocktest.R;

public class ActionBarSherlockTestActivity extends SherlockActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    	setTheme(R.style.Theme_Sherlock);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add("Save")
            .setIcon(R.drawable.ic_compose)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

        menu.add("Search")
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | 
                MenuItem.SHOW_AS_ACTION_WITH_TEXT);

        return true;
    }
}

В результате получим такой внешний вид окна приложения:

Режим действия

ActionBar Sherlock поддерживает возможность отображения контекстно-зависимого содержания. Такая возможность называется режим действий (ActionMode). режим действий можно использовать, например, для отображения контекстного “меню” при длинном нажатии на єлемент списка.
Для того, чтобі добавить возможность отображать режим действий в приложение, нужно сделать следующее:

  • Создать класс, производный от ActionMode.Callback
  • Реализовать в этом классе метод onCreateActionMode(), в котором добавить нужные команды.
  • Реализовать в этом классе метод onActionItemClicked(), в котором написать код, обрабатывающий нажатия на кнопки в ActionBar
  • Для перехода в режим действий вызвать метод startActionMode() и в качестве параметра передать ему объект выше указанного класса

В коде это выглядит приблизительно так:

public class ActionBarSherlockTestActivity extends SherlockActivity {
	
	ActionMode mMode;
	
	private final class ActionModeA implements ActionMode.Callback {

        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            menu.add("Save")
                .setIcon(R.drawable.ic_compose)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
            menu.add("Search")
                .setIcon(R.drawable.ic_search)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
            return true;
        }

		public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
			// TODO Auto-generated method stub
			return false;
		}

		public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
			Toast.makeText(ActionBarSherlockTestActivity.this, 
                            "Got click: " + item, Toast.LENGTH_SHORT).show();
            mode.finish();
			return true;
		}

		public void onDestroyActionMode(ActionMode mode) {
			// TODO Auto-generated method stub
			
		}
        
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
    	setTheme(R.style.Theme_Sherlock);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button btnTest = (Button)findViewById(R.id.btnTest);
        if(btnTest != null) {
        	btnTest.setOnClickListener(new OnClickListener() {
				
				public void onClick(View v) {
					mMode = startActionMode(new ActionModeA());
				}
			});
        }
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add("Save")
            .setIcon(R.drawable.ic_compose)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

        menu.add("Search")
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | 
                MenuItem.SHOW_AS_ACTION_WITH_TEXT);
        return true;
    }
}

И в результате получаем такое:

Существует, также, возможность отображать ActionBar только в режиме Action Mode и скрывать ее в остальное время работы приложения. Для этого в onCreate() надо вызвать requestWindowFeature(Window.FEATURE_NO_TITLE).

Провайдеры действий

ActionBar Sherlock поддерживает работу с провайдерами действий (Action Provider), которые позволяют реализовать отображение собственных виджетов в ActionBar и добавить более гибкое взаимодействие с пользователем. Action Provier можно повторно использовать в нескольких активитях.
Есть две возможности указать Action Provider для элемента – прописать его в XML файле для пункта меню или указать в коде с помощью setActionProvider().
Рассмотрим реализацию Action Provider’а, который по нажатию на кнопку в ActionBar открывает системные настройки:

public static class SettingsActionProvider extends ActionProvider {
	private static final Intent sSettingsIntent = new Intent(Settings.ACTION_SETTINGS);

	private final Context mContext;

    public SettingsActionProvider(Context context) {
        super(context);
        mContext = context;
    }

    @Override
    public View onCreateActionView() {
        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        View view = layoutInflater.inflate(R.layout.settings_action_provider, null);
        ImageButton button = (ImageButton) view.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                mContext.startActivity(sSettingsIntent);
            }
        });
        return view;
    }

    @Override
    public boolean onPerformDefaultAction() {
        mContext.startActivity(sSettingsIntent);
        return true;
    }
}
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Этот элемент будет отображен в ActionBar
    menu.add("Settings")
        .setActionProvider(new SettingsActionProvider(
        		ActionBarSherlockTestActivity.this))
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | 
        		MenuItem.SHOW_AS_ACTION_WITH_TEXT);
        
    // Этот элемент будет отображен в стандартном меню
    menu.add("Settings")
        .setActionProvider(new SettingsActionProvider(
        		ActionBarSherlockTestActivity.this))
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
    return true;
}

XML-файл для кнопки:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:focusable="true"
    android:addStatesFromChildren="true"
    android:background="?attr/actionBarItemBackground"
    style="?attr/actionButtonStyle">
    <ImageButton android:id="@+id/button"
        android:background="@drawable/ic_launcher_settings"
        android:layout_width="32dip"
        android:layout_height="32dip"
        android:layout_gravity="center"
        android:scaleType="fitCenter"
        android:adjustViewBounds="true" />
</LinearLayout>

После создания провайдера действий и добавления его к пунктам меню получим такое:

Collapsible Actions

Есть возможность, при нажатии на пункт меню, отображать собственный контрол на всю ширину ActionBar. Например, для поиска можно отображать текстовое поле. Сделать это можно, указав дайаут с помощью setActionView() и стиль MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW.

public boolean onCreateOptionsMenu(Menu menu) {
    boolean isLight = SampleList.THEME == R.style.Theme_Sherlock_Light;
    menu.add("Search")
        .setIcon(isLight ? R.drawable.ic_search_inverse : R.drawable.ic_search)
        .setActionView(R.layout.collapsible_edittext)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | 
                MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
    return true;
}

При нажатии на пункт в ActionBar будет отображен контрол из XML файла collapsible_edittext.xml.

Полезные функции

Индикатор прогресса
Есть возможность отобразить индикатор прогресса в ActionBar. Такая возможность может быть полезна для отображения прогресса длительной операции. Сделать это можно с помощью метода setSupportProgressBarIndeterminateVisibility().
Оверлей
Можно отображать ActionBar поверх контента при скроллинге. Очень полезная возможность, например, при просмотре текстов. Перевести ActinBar в режим оверлея можно с помощью метода requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY).

Различные типы активитей

В ActionBar Sherlock помимо обычной активити есть классы для отображения активитей со списками, активитей настройки, диалогов.
SherlockPreferenceActivity
Этот класс используется для отображения окон настройки. Функционал аналогичен PreferenceActivity из Android SDK.

SherlockListActivity и SherlockExpandableListActivity
Это активити, производные от ListActivity и ExpandableListActivity соответственно, в которую добавлен функционал по работе с ActionBar.
Диалоги
Есть возможность отображать активити в виде диалогов. Для этого надо указать соответствующую тему в манифесте (необходимо указывать тему именно в манифесте).

<activity
    android:name=".Dialog"
    android:label="@string/dialog"
    android:theme="@style/Theme.Sherlock.Dialog">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="com.actionbarsherlock.sample.demos.EXAMPLE" />
    </intent-filter>
</activity>

На вид выглядит так:

Пара слов о навигации

В ActionBar Sherlock есть возможность организовать навигацию внутри приложения средствами ActionBar. Визуально получается очень приятный результат, например можно реализовать навигацию посредством выпадающего списка или вкладками или еще каким-либо способом, встроив контрол для навигации в ActionBar.

Более подробно реализацию навигации рассмотрим в следующей части статьи.