Mainaktivität kann nicht in Runnable umgewandelt werdenJava

Java-Forum
Anonymous
 Mainaktivität kann nicht in Runnable umgewandelt werden

Post by Anonymous »

Meine Anwendung ist nur 1 Seite zum Lesen von SMS, und ich habe MainActivity dafür verwendet. Wie kann ich diesen Fehler beheben? Ich möchte nur einen Timer haben, der die Funktion immer wieder ausführt. < /P>

Code: Select all

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()) {
//  do {
String address = cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Sms.ADDRESS));
String body = cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Sms.BODY));
smsList.add("Sender: " + address + "\nMessage: " + body);
//   } while (cursor.moveToNext());
}

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) {
Handler handler = new Handler(getMainLooper());
handler.postDelayed(() -> {
readSms();
ArrayAdapter adapter = (ArrayAdapter) listView.getAdapter();
adapter.notifyDataSetChanged();
handler.postDelayed(this,5000); // Repeat every 5 seconds
}, 5000); // Initial delay of 10 seconds

}
}
}

}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post