要在Android的DocumentsUI文件浏览器菜单中列出AppData,可以使用以下代码示例实现:
首先,在AndroidManifest.xml文件中添加以下权限:
然后,创建一个新的Activity,并在其布局文件中添加一个RecyclerView来显示AppData。例如,创建一个名为AppDataListActivity的Activity,并在其布局文件app_data_list_activity.xml中添加以下代码:
接下来,在AppDataListActivity的Java文件中,添加以下代码:
import android.os.Bundle;
import android.provider.DocumentsContract;
import android.support.v4.provider.DocumentFile;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class AppDataListActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private AppDataAdapter appDataAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_data_list_activity);
recyclerView = findViewById(R.id.appDataRecyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
List appDataList = getAppDataList();
appDataAdapter = new AppDataAdapter(appDataList);
recyclerView.setAdapter(appDataAdapter);
recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null) {
int position = rv.getChildAdapterPosition(child);
AppData appData = appDataList.get(position);
Toast.makeText(AppDataListActivity.this, "Clicked: " + appData.getName(), Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
}
private List getAppDataList() {
List appDataList = new ArrayList<>();
DocumentFile appDataDir = DocumentFile.fromTreeUri(this, DocumentsContract.buildTreeUri(
"com.android.externalstorage.documents",
"primary:Android/data"
));
if (appDataDir != null && appDataDir.isDirectory()) {
for (DocumentFile file : appDataDir.listFiles()) {
appDataList.add(new AppData(file.getName(), file.lastModified()));
}
}
return appDataList;
}
}
注意:在上述代码中,AppData是一个自定义的数据类,用于表示每个AppData的名称和最后修改时间。您可以根据自己的需要进行相应的修改。
最后,创建一个AppDataAdapter类来适配RecyclerView,例如:
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
public class AppDataAdapter extends RecyclerView.Adapter {
private List appDataList;
public AppDataAdapter(List appDataList) {
this.appDataList = appDataList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.app_data_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
AppData appData = appDataList.get(position);
holder.nameTextView.setText(appData.getName());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
holder.dateTextView.setText(sdf.format(new Date(appData.getLastModified())));
}
@Override
public int getItemCount() {
return appDataList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView nameTextView;
TextView dateTextView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
nameTextView = itemView.findViewById(R.id.nameTextView);
dateTextView = itemView.findViewById(R.id.date