<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.devnagi.callblocke"> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
enter image description here Не удалось определить стартовую активность, по умолчанию активность не найдена ошибка при запуске Активность в
<receiver android:name=".CallBarring"> <intent-filter android:priority="100" > <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver> <!--launched Activity --> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".AddToBlocklistActivity" android:label="@string/app_name" />
пакет com.example.devnagi.callblocke.callblocker;
импорт java.util.List;
импорт android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; Импорт android.os.Bundle; import android.support.v7.app.ActionBarActivity; импорт android.view.LayoutInflater; импортировать android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; импорт android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView;
импорт com.example.devnagi.callblocke.R;
общественного класса MainActivity расширяет ActionBarActivity реализует OnClickListener, OnItemLongClickListener {
// Декларация все на компонентах экрана Главного экрана частного Кнопка add_blacklist_btn; открытый список ListView; // Объект BlacklistDAO для запроса к базе данных private BlacklistDAO blackListDao; // Он содержит список объектов черного списка, извлеченных из базы данных public static List blockList; // Это значение содержит номер строки, который выбран пользователем для дальнейшего действия private int selectedRecordPosition = -1;
@Override protected void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_main);
// Initialization of the button of the Main screen add_blacklist_btn = (Button) findViewById(R.id.add_blacklist_btn); // Attachment of onClickListner for it add_blacklist_btn.setOnClickListener(this); // Initialization of the listview of the Main screen to display black listed phone numbers listview = (ListView)
findViewById (R.id.listview); // Устанавливаем заголовок конечного списка ListViewInstallation = (LayoutInflater) this.getSystemService (Context.LAYOUT_INFLATER_SERVICE); final View rowView = inflater.inflate (R.layout.list_item, listview, false); listview.addHeaderView (rowView); // Прикрепите OnItemLongClickListener для отслеживания действий пользователя и выполните соответственно listview.setOnItemLongClickListener (это); }
частная пустота populateNoRecordMsg() {// If, no record found in the database, appropriate message needs to
будет отображаться. if (blockList.size() == 0) {final TextView tv = новый TextView (это); tv.setPadding (5, 5, 5, 5); tv.setTextSize (15); tv.setText («Запись не найдена!»); listview.addFooterView (тв); }}
@Override общественного недействительными OnClick (View v) {// Визуализировать AddToBlocklistActivity экран один раз нажмите на кнопку "Добавить", если (v == add_blacklist_btn) {startActivity (новый Intent (это, AddToBlocklistActivity.class)); }} @Override public boolean onItemLongClick (родитель AdapterView, вид View, int position, long id) {// Если прессованная строка не является заголовком, обновляется selectedRecordPosition и // показывает диалог для дальнейшего выбора, если (позиция> 0) {selectedRecordPosition = позиция - 1; showDialog(); } return true; } @Override protected void onResume() {super.onResume(); // Инициализировать объект DAO blackListDao = новый BlacklistDAO (это); // Извлеките список Черных перечисленных номеров из базы данных с помощью объекта DAO blockList = blackListDao.getAllBlacklist(); // Удалить представление нижнего колонтитула if (listview.getChildCount()> 1) listview.removeFooterView (listview.getChildAt (listview.getChildCount() - 1)); // Теперь свяжите CustomArrayAdapter с ListView.setAdapter ListView (новый CustomArrayAdapter (это, R.layout.list_item, blockList)); // Если в базе данных нет записей, необходимо отобразить соответствующее сообщение. populateNoRecordMsg(); } private void showDialog() {// Перед удалением длинной нажатой записи необходимо указать для подтверждения с пользователем. Итак, постройте первый выпуск AlartBox AlertDialog.Builder alertDialogBuilder = новый AlertDialog.Builder (this); // Установите соответствующее сообщение. alertDialogBuilder.setMessage («Действительно ли вы хотите удалить выбранную запись ?»); // Добавить положительную кнопку и это действие. В нашем случае действие будет удалением данных alertDialogBuilder.setPositiveButton ("Удалить", нового DialogInterface.OnClickListener() { @Override общественных недействительного OnClick (DialogInterface arg0, внутр arg1) { попытки {
blackListDao.delete(blockList.get(selectedRecordPosition)); // Removing the same from the List to remove from display as well blockList.remove(selectedRecordPosition); listview.invalidateViews(); // Reset the value of selectedRecordPosition selectedRecordPosition = -1; populateNoRecordMsg(); } catch (Exception e) { e.printStackTrace(); } } }); // Add a negative button and it's action. In our case, just hide the dialog box alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); // Now, create the Dialog and show it. final AlertDialog
alertDialog = alertDialogBuilder.create(); alertDialog.show();}
общественного класса CustomArrayAdapter расширяет ArrayAdapter {private LayoutInflater inflater; // This would hold the database objects i.e. Blacklist private List<Blacklist> records; @SuppressWarnings("unchecked") public CustomArrayAdapter(Context context, int resource,
@SuppressWarnings («rawtypes») Объекты списка) {супер (контекст, ресурс, объекты); this.records = objects; inflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); } @Override public View getView (int position, View convertView, родитель ViewGroup) { // Повторное использование представления, чтобы эффект прокрутки был гладким, если (convertView == null) convertView = inflater.inflate (R.layout.list_item, parent, false); // Получить номер телефона из объекта базы данных final Blacklist phoneNumber = records.get (position); // Установите экранный компонент для отображения результатов ((TextView) convertView.findViewById (R.id.serial_tv)). SetText ("" + (позиция +1)); ((TextView) convertView.findViewById (R.id.phone_number_tv)). SetText (номер телефонаNumber.phoneNumber); return convertView; }}}
Что это за грязный текст? –