【发布时间】:2021-01-03 14:43:04
【问题描述】:
我正在开发短信应用程序,但我是应用程序开发的新手,所以遇到问题,请帮助我。 到目前为止,我能够获取消息,但问题是,我只能在活动中显示 SMS,但我想在片段上显示它们。
下面是我的“FetchingInboxActivity.java”
import android.Manifest;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentManager;
import java.util.ArrayList;
public class FetchingInboxActivity extends Activity {
ListView listView;
private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100;
ArrayList<String> smsList;
private static final String TAG = FetchingInboxActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fetching_inbox);
listView = (ListView) findViewById(R.id.abcd);
int permissioncheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_SMS);
if(permissioncheck == PackageManager.PERMISSION_GRANTED){
showContacts();
} else{
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.READ_SMS}, PERMISSIONS_REQUEST_READ_CONTACTS);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[]
permissions,
@NonNull int[] grantResults) {
if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) {
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
showContacts();
}
} else{
Toast.makeText(this, "Grant kro be", Toast.LENGTH_LONG).show();
}
}
private void showContacts() {
Uri inboxUri = Uri.parse("content://mms-sms/conversations/?simple=true");
smsList = new ArrayList<>();
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(inboxUri, null, null, null, null);
while (cursor.moveToNext()){
String number =
cursor.getString(cursor.getColumnIndexOrThrow("address")).toString();
String body =
cursor.getString(cursor.getColumnIndexOrThrow("body")).toString();
smsList.add("Number: "+number+ "\n" + "Body: "+body);
Log.d(TAG, "showcontacts: ");
}
cursor.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, smsList);
listView.setAdapter(adapter);
}
}
下面是我的“FetchingInboxActivity.java”Xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FetchingInboxActivity"
android:id="@+id/containr">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/abcd" />
</FrameLayout>
下面是我想要显示收件箱而不是上面提到的活动的片段类。
public class AwayFragment extends Fragment {
public AwayFragment() {
// Required empty public constructor
}
static AwayFragment inst;
ArrayList<String> smsMessageList = new ArrayList<String>();
ListView smsListView;
ArrayAdapter arrayAdapter;
static AwayFragment instance() { return inst;}
@Override
public void onStart(){
super.onStart();
inst = this;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_away, container, false);
// Inflate the layout for this fragment
String[] awayStrings = {
"gas",
"cook",
"Sunset",
"MidMorning",
"Good Morning",
"Breakfast",
"MidMorning",
"Lunch",
"Afternoon",
"Sunset",
"Supper Time",
"Lunch",
"Afternoon",
"Supper Time",
"Lovely Night",
"Chilly Dreams"
};
ListView lv = (ListView) view.findViewById(R.id.listView2);
ArrayAdapter<String> lva = new ArrayAdapter<String>(
getActivity(), android.R.layout.simple_list_item_1, awayStrings);
lv.setAdapter(lva);
final SwipeRefreshLayout mSwipeRefreshLayout = (SwipeRefreshLayout)
view.findViewById(R.id.fragment_away);
mSwipeRefreshLayout.setOnRefreshListener(
() -> {
((MainActivity) getActivity()).refreshNow();
Toast.makeText(getContext(), "Refresh Layout working",
Toast.LENGTH_LONG).show();
}
);
return view;
}
public static class Way extends AppCompatActivity{
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[]
permissions, @NonNull int[] grantResults) {
if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) {
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
showContacts();
}
} else{
Toast.makeText(this, "Grant kro be", Toast.LENGTH_LONG).show();
}
}
ListView listView;
private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100;
ArrayList<String> smsList;
private final String TAG = FetchingInboxActivity.class.getSimpleName();
public void showContacts() {
listView = (ListView) findViewById(R.id.listView2);
final String[] projection = new String[]{"*"};
Uri inboxUri = Uri.parse("content://mms-sms/conversations");
smsList = new ArrayList<>();
ContentResolver contentResolver = getContentResolver();
Cursor cursor = contentResolver.query(inboxUri, projection, null, null, null);
while (cursor.moveToNext()){
String number =
cursor.getString(cursor.getColumnIndexOrThrow("address")).toString();
String body =
cursor.getString(cursor.getColumnIndexOrThrow("body")).toString();
smsList.add("Number: "+number+ "\n" + "Body: "+body);
Log.d(TAG, "showcontacts: ");
}
cursor.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, smsList);
listView.setAdapter(adapter);
}
}}
最后是 Fragment XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_away"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView2">
</ListView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
【问题讨论】:
标签: android android-fragments android-activity sms