У меня есть этот код, который работал нормально. Я использую запрос ContentProvider для доступа к SMS -сообщениям и отображать их с помощью Cursor . Если я попытался использовать Timertask приложение выполнялось, но сбоил только через некоторое время, не запустив что -либо. readsms () с интервалами и продолжайте добавлять в ListView. (На данный момент не беспокоится о дубликатах) Тем не менее, я не могу добавить здесь функцию интервала, чтобы продолжать читать входящее сообщение SMS.
Что я делаю неправильно и что должно быть моим синтаксисом? Beofre, что я попробовал TaskTimer, и это также разбилось во время выполнения. < /p>
package com.example.emptyviews;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Telephony;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.os.Handler;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private ArrayList smsList = new ArrayList();
private ListView listView;
private static final int READ_SMS_PERMISSION_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, smsList);
listView.setAdapter(adapter);
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{android.Manifest.permission.READ_SMS}, READ_SMS_PERMISSION_CODE);
} else {
/*
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
readSms();
//adapter.notifyDataSetChanged();
}
};
timer.schedule(task, 10000, 5000);
*/
}
}
private void readSms() {
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(
Telephony.Sms.CONTENT_URI,
null,
null,
null,
null);
if (cursor != null && cursor.moveToFirst()) {
String address = cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Sms.ADDRESS));
String body = cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Sms.BODY));
smsList.add("Sender: " + address + "\nMessage: " + body);
}
if (cursor != null) {
cursor.close();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == READ_SMS_PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
new android.os.Handler().postDelayed(new Runnable(){
@Override
public void run(){
readSms();
ArrayAdapter adapter = (ArrayAdapter) listView.getAdapter();
adapter.notifyDataSetChanged();
}
});
//readSms();
//ArrayAdapter adapter = (ArrayAdapter) listView.getAdapter();
//adapter.notifyDataSetChanged();
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... is-failing
Java Android читать SMS с таймером проходит ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1752234094
Anonymous
У меня есть этот код, который работал нормально. Я использую запрос ContentProvider для доступа к SMS -сообщениям и отображать их с помощью Cursor . Если я попытался использовать Timertask приложение выполнялось, но сбоил только через некоторое время, не запустив что -либо. readsms () с интервалами и продолжайте добавлять в ListView. (На данный момент не беспокоится о дубликатах) Тем не менее, я не могу добавить здесь функцию интервала, чтобы продолжать читать входящее сообщение SMS.
Что я делаю неправильно и что должно быть моим синтаксисом? Beofre, что я попробовал TaskTimer, и это также разбилось во время выполнения. < /p>
package com.example.emptyviews;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Telephony;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.os.Handler;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private ArrayList smsList = new ArrayList();
private ListView listView;
private static final int READ_SMS_PERMISSION_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, smsList);
listView.setAdapter(adapter);
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{android.Manifest.permission.READ_SMS}, READ_SMS_PERMISSION_CODE);
} else {
/*
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
readSms();
//adapter.notifyDataSetChanged();
}
};
timer.schedule(task, 10000, 5000);
*/
}
}
private void readSms() {
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(
Telephony.Sms.CONTENT_URI,
null,
null,
null,
null);
if (cursor != null && cursor.moveToFirst()) {
String address = cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Sms.ADDRESS));
String body = cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Sms.BODY));
smsList.add("Sender: " + address + "\nMessage: " + body);
}
if (cursor != null) {
cursor.close();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == READ_SMS_PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
new android.os.Handler().postDelayed(new Runnable(){
@Override
public void run(){
readSms();
ArrayAdapter adapter = (ArrayAdapter) listView.getAdapter();
adapter.notifyDataSetChanged();
}
});
//readSms();
//ArrayAdapter adapter = (ArrayAdapter) listView.getAdapter();
//adapter.notifyDataSetChanged();
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79698152/java-android-read-sms-with-timer-is-failing[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия