Программирование является моим хобби уже давно (правда на других языках и платформах), но до андроида руки дотянулись совсем недавно. Прошло несколько этапов, прежде чем я добрался до написания программ.
Сначала была пара месяцев посвященных Java, на сайте с «Сгибателем».
После, долгие попытки подружится с Eclipse, закончившиеся побегом на Android Studio.
На данный момент выпущено 7 программ и две находятся в разработке.
Данная подборка возникла как попытка структурирования и оптимизации полученной в процессе информации.
Заранее извиняюсь за возможно некорректную терминологию – так как практикую обучение через создание, и в теоретической части есть пробелы.
Надеюсь, что приведенные примеры окажутся полезными.
finish();
Выход с большей вероятностью (api 15+)
Intent intent = new Intent(Activity.this, Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); finish();
Либо прописываем в AndroidManifest.xml — android:noHistory=«true»
Данные настройки позволяют избежать гуляния по предыдущим активностям вместо выхода.
Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); try { MediaPlayer mp = MediaPlayer.create(context.getApplicationContext(), alert); mp.setVolume(100, 100); mp.start(); mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp.release(); } }); } catch (Exception e) { Toast.makeText(context, "Error default media ", Toast.LENGTH_LONG).show(); }
Что бы звук не был тихим: stackoverflow.com/questions/8278939/android-mediaplayer-volume-is-very-low-already-adjusted-volume
Для вибрации необходимо прописать в манифесте
<uses-permission android:name="android.permission.VIBRATE" />
Сам код:
vibrator = (Vibrator) getSystemService (VIBRATOR_SERVICE); vibrator.vibrate(400);
learn-it-stuff.blogspot.ru/2011/12/how-to-use-androids-ringtonemanager-to.html
developer.android.com/reference/android/media/RingtoneManager.html
stackoverflow.com/questions/9021846/is-there-a-way-to-customize-the-android-ringtone-picker-dialog
builder.setMessage(Html.fromHtml("<font color='#FF0000'><b>John:</b></font>"+"How are you?"))
Выравнивание текста диалога:
stackoverflow.com/questions/3965122/android-how-to-align-message-in-alertdialog
Форматирование текста:
stackoverflow.com/questions/3235131/set-textview-text-from-html-formatted-string-resource-in-xml
Тень на тексте:
textv.setShadowLayer(1, 0, 0, Color.BLACK);
Intent intent = new Intent(MainActivity.this, Level002Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); // Если не хотим сохранять историю startActivity(intent);
public class MyActivity extends Activity implements View.OnClickListener {
2. Объявляем переменную Button btn;
3. В onCreate прописываем
btn =(Button) findViewById(R.id.btn); btn.setOnClickListener(this);
4. Создаем процедуру:
public void onClick(View v) { // по id определеяем кнопку, вызвавшую этот обработчик switch (v.getId()) { case R.id.btn: //Прописываем действие по нажатию break; } }
Toast.makeText(this, "Текст сообщения", Toast.LENGTH_SHORT).show();
android:theme="@android:style/Theme.Translucent.NoTitleBar"
Пример кода:
protected Dialog onCreateDialog(int id) { if (id == DIALOG_EXIT) { AlertDialog.Builder adb = new AlertDialog.Builder(this); // заголовок adb.setTitle(R.string.Help); // сообщение // adb.setMessage(R.string.HelperD); adb.setMessage(this.getResources().getText(R.string.helpMain)); // иконка adb.setIcon(R.drawable.ic_launcher); // кнопка положительного ответа adb.setPositiveButton( getResources().getString(R.string.close),myClickListener); // кнопка отрицательного ответа return adb.create(); } return super.onCreateDialog(id); } DialogInterface.OnClickListener myClickListener = new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (which) { // положительная кнопка case Dialog.BUTTON_POSITIVE: // saveData(); // Intent intent = new Intent(MyActivity.this, MyActivity.class); // startActivity(intent); // finish(); break; } } };
Вызов: showDialog(DIALOG_EXIT);
String mess = getResources().getString(R.string.mess_1);
habrahabr.ru/post/129582/
Код выглядит так:
try { // Выполняется } catch (Exception e) { // исключение }
android.text.format.DateFormat.is24HourFormat(context)
muratonnet.blogspot.ru/2013/08/when-i-was-developing-date-time-picker.html
getResources().getColor(R.color.errorColor)
String.format("%.2f%n1 paramFloat);
Пример Кода:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
developer.android.com/design/patterns/notifications.html
developer.android.com/guide/topics/ui/notifiers/notifications.html
Для api<16
void sendNotif(Context context) { nm = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); String msgText = "Текст Сообщения"; Notification notif = new Notification(R.drawable.ic_launcher, "Статус строка сообщения", System.currentTimeMillis()); Intent intent = new Intent(context, options.class); intent.putExtra(MyActivity.FILE_NAME, "somefile"); PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, 0); notif.setLatestEventInfo(context, "Статус строка сообщения", msgText, pIntent); // ставим флаг, чтобы уведомление пропало после нажатия notif.flags |= Notification.FLAG_AUTO_CANCEL; // отправляем, цифра ID сообщения. nm.notify(1, notif); } //Для api>15 void sendNotif16(Context context) { String msgText = "Текст Сообщения"; NotificationManager notificationManager =getNotificationManager(context); PendingIntent pi = getPendingIntent(context); Notification.Builder builder = new Notification.Builder(context); builder.setContentTitle("NotificationTitle") .setContentText("Текст отображаемый в свернутом виде") .setSmallIcon(R.drawable.ic_launcher) .setAutoCancel(true) .setPriority(Notification.PRIORITY_HIGH) .addAction(R.drawable.ic_launcher,context.getResources().getString(R.string.NotificationButton), pi); Notification notification = new Notification.BigTextStyle(builder) .bigText(msgText).build(); notificationManager.notify(1, notification); } public NotificationManager getNotificationManager(Context context) { return (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); } //Вызов: if (Build.VERSION.SDK_INT < 16) { sendNotif(context); } else { sendNotif16(context); } //Отмена public static void CancelNotification(Context ctx, int notifyId) { String ns = Context.NOTIFICATION_SERVICE; NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns); nMgr.cancel(notifyId); }
Пример кода:
В XML android:keepScreenOn=«true» или в программе:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Лучшее из того что встречал, не всегда стабильно, но быстро.
Пример кода:
TableLayout table = (TableLayout) findViewById(R.id.score_table); // create a new TableRow TableRow row = new TableRow(this); // create a new TextView TextView t = new TextView(this); t.setBackgroundResource(R.drawable.cell_shape); t.setPadding(5,5,5,5); View view_instance = (View)findViewById(R.id.txt1); ViewGroup.LayoutParams params=view_instance.getLayoutParams(); t.setLayoutParams(params); t.setText(data) ; t.setTextColor(getResources().getColor(R.color.windowBackground)); row.addView(t); table.addView(row,new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.FILL_PARENT));
Пример кода:
public void onBackPressed() { Intent intent = new Intent(Activity1.this, Activity2.class); startActivity(intent); super.onBackPressed(); }
stackoverflow.com/questions/7417123/android-how-to-adjust-layout-in-full-screen-mode-when-softkeyboard-is-visible
stackoverflow.com/questions/9003166/android-keyboard-next-button-issue-on-edittext
Пример кода:
Прописываем в манифесте
android:windowSoftInputMode="stateAlwaysHidden|adjustResize|adjustPan"
Используем в XML
android:imeOptions="actionNext"
для завершения
android:imeOptions="actionDone"
stackoverflow.com/questions/2795833/check-orientation-on-android-phone/10453034#10453034
stackoverflow.com/questions/3611457/android-temporarily-disable-orientation-changes-in-an-activity
Такое использовать не рекомендуется, но если надо.
Вот пример относительно стабильной реализации:
private static void disableRotation(Activity activity) { WindowManager windowManager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE); Configuration configuration = activity.getResources().getConfiguration(); int rotation = windowManager.getDefaultDisplay().getRotation(); // Search for the natural position of the device if(configuration.orientation == Configuration.ORIENTATION_LANDSCAPE && (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) || configuration.orientation == Configuration.ORIENTATION_PORTRAIT && (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270)) { // Natural position is Landscape switch (rotation) { case Surface.ROTATION_0: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; case Surface.ROTATION_90: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); break; case Surface.ROTATION_180: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); break; case Surface.ROTATION_270: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; } } else { // Natural position is Portrait switch (rotation) { case Surface.ROTATION_0: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; case Surface.ROTATION_90: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; case Surface.ROTATION_180: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); break; case Surface.ROTATION_270: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); break; } } } private static void enableRotation(Activity activity) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); }
stackoverflow.com/questions/3052149/using-alarmmanager-to-start-a-service-at-specific-time
developer.android.com/reference/android/app/AlarmManager.html
stackoverflow.com/questions/2844274/multiple-calls-to-alarmmanager-setrepeating-deliver-the-same-intent-pendinginten
Возобновление после перезагрузки:
stackoverflow.com/questions/12512717/android-alarmmanager-after-reboot
github.com/commonsguy/cw-omnibus/blob/master/AlarmManager/Scheduled/src/com/commonsware/android/schedsvc/PollReceiver.java
stackoverflow.com/questions/4315611/android-get-all-pendingintents-set-with-alarmmanager
Пример кода с вызовом после перезагрузки (не оптимальный нужно дорабатывать):
В манифесте прописываем:
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <receiver android:name=".BootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.HOME" /> </intent-filter> </receiver> <receiver android:name=".AlarmManagerBroadcastReceiver"> </receiver>
BootReceiver.java public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { AlarmManagerBroadcastReceiver.setTime=3; PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "EyeGuard"); SetAlarm(context); } } public void SetAlarm(Context context) { //Toast.makeText(context, "SetAlarm", 10).show(); AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class); intent.putExtra(AlarmManagerBroadcastReceiver.ONE_TIME, Boolean.FALSE); PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); //After after 30 seconds am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * AlarmManagerBroadcastReceiver.setTime *60 , pi); /// 1000 } public void CancelAlarm(Context context) { // Toast.makeText(context, "CancelAlarm", Toast.LENGTH_LONG).show(); Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(sender); } } AlarmManagerBroadcastReceiver.java public class AlarmManagerBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { AlarmManagerBroadcastReceiver.setTime=3; PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "EyeGuard"); wl.acquire(10000); //Засыпает через 10 секунд //Здесь свой код // } public void SetAlarm(Context context) { AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class); intent.putExtra(ONE_TIME, Boolean.FALSE); PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 *setTime *setTime2 , pi); /// 1000 *25 *60 } public void CancelAlarm(Context context) { Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(sender); } public void setOnetimeTimer(Context context){ AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class); intent.putExtra(ONE_TIME, Boolean.TRUE); PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), pi); } }
В активити из которой вызываем
Прописываем private AlarmManagerBroadcastReceiver alarm;
В onCreate:
alarm = new AlarmManagerBroadcastReceiver();
Добавляем процедуры:
public void startRepeatingTimer(View view) { // Toast.makeText(this, "startRepeatingTimer", 30).show(); Context context = this.getApplicationContext(); if(alarm != null){ alarm.SetAlarm(context); }else{ //Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show(); } } public void cancelRepeatingTimer(View view){ // Toast.makeText(this, "cancelRepeatingTimer", 30).show(); Context context = this.getApplicationContext(); if(alarm != null){ alarm.CancelAlarm(context); }else{ // Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show(); } }
Вызов осуществляем:
startRepeatingTimer(v);
Отменяем:
cancelRepeatingTimer(v);
stackoverflow.com/questions/18679455/in-android-how-can-i-turn-off-the-screen-programatically
pastebin.com/RyjTF08K
stackoverflow.com/questions/13696891/programmatically-set-screen-to-off-in-android
forum.xda-developers.com/showthread.php?t=1210421
developer.android.com/reference/android/os/PowerManager.html#goToSleep%28long
В Манифест добавляем:
< uses-permission android:name="android.permission.WAKE_LOCK" />
Сам код:
PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG"); wakeLock.acquire();
habrahabr.ru/post/133858/
habrahabr.ru/post/203368/
Пример кода:
В Манифест добавляем:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
Прописываем в активити import com.google.android.gms.ads.*;
В onCreate:
adView = new AdView(this); adView.setAdUnitId("код баннера"); adView.setAdSize(AdSize.SMART_BANNER); // Поиск разметки LinearLayout (предполагается, что ей был присвоен // атрибут android:id="@+id/mainLayout"). RelativeLayout layout = (RelativeLayout)findViewById(R.id.RLMain); // Добавление в разметку экземпляра adView. layout.addView(adView); // Инициирование общего запроса. // AdRequest adRequest = new AdRequest.Builder().build(); AdRequest adRequest = new AdRequest.Builder().build(); //Для теста разкомментируем строчки и подставляем ID тестового девайса /* AdRequest adRequest = new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) // Эмулятор .addTestDevice("B6F0A0DED6232ADEA16984CB963C6552") // Тестовый телефон Galaxy Nexus .build();*/ // Загрузка adView с объявлением. adView.loadAd(adRequest); @Override public void onPause() { adView.pause(); super.onPause(); } @Override public void onResume() { super.onResume(); adView.resume(); } @Override public void onDestroy() { adView.destroy(); super.onDestroy(); }
developer.android.com/training/displaying-bitmaps/index.html
stackoverflow.com/questions/14359024/out-of-memory-error-while-loading-bitmaps
stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap-object
hashcode.ru/questions/310542/java-android-%D0%BF%D0%B0%D0%B4%D0%B0%D0%B5%D1%82-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%B8-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B5-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9
hashcode.ru/questions/305592/java-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-android
developer.android.com/training/camera/photobasics.html
stackoverflow.com/questions/2386025/android-camera-without-preview/5384913#5384913
stackoverflow.com/questions/7398897/how-to-use-camera-to-take-picture-in-a-background-service-on-android
stackoverflow.com/questions/9976817/take-picture-with-camera-intent-and-save-to-file
stackoverflow.com/questions/15214321/saving-pictures-taken-by-camera-in-android-app
developer.android.com/guide/topics/media/camera.html
stackoverflow.com/questions/8031276/prompt-user-to-rate-an-android-app-inside-the-app
Пример кода:
String appPackageName= getPackageName(); Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id="+appPackageName)); marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY|Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET|Intent.FLAG_ACTIVITY_MULTIPLE_TASK); startActivity(marketIntent);
ссылка на оригинал статьи http://habrahabr.ru/post/232885/
Добавить комментарий