Java Android Studio访问文件
希望在android应用程序中以文本形式打开文本文档。我在使用Java的Android Studio中工作。我的权限设置为允许我请求用户权限,我做了很多研究,没有找到比我拥有的更多的东西。出现一个错误,未授予权限。我使用的是安卓7或更高版本。请帮忙 我在MainActivity中的代码是:Java Android Studio访问文件,java,android,android-studio,Java,Android,Android Studio,希望在android应用程序中以文本形式打开文本文档。我在使用Java的Android Studio中工作。我的权限设置为允许我请求用户权限,我做了很多研究,没有找到比我拥有的更多的东西。出现一个错误,未授予权限。我使用的是安卓7或更高版本。请帮忙 我在MainActivity中的代码是: public class MainActivity extends AppCompatActivity { static ArrayList<String> notes = new Ar
public class MainActivity extends AppCompatActivity {
static ArrayList<String> notes = new ArrayList<>();
static ArrayAdapter arrayAdapter;
//for asking permission
private final static int REQUEST_CODE_ASK_PERMISSIONS = 1;
private static final String[] REQUIRED_SDK_PERMISSIONS = new String[] {
Manifest.permission.WRITE_EXTERNAL_STORAGE};
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.add_note_menu, menu);
return super.onCreateOptionsMenu (menu);
}
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
super.onOptionsItemSelected(item);
if (item.getItemId() == R.id.open_note){
//get txt from file and send as text to textEditor action
//pick the file
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
//intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(
Intent.createChooser(intent, "Choose a file"),
8778
);
}
if (item.getItemId() == R.id.new_note){
//New Note
Intent intent = new Intent (getApplicationContext(), NoteEditorActivity.class);
startActivity(intent);
return true;
}
return false;
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
//get the file path as string
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 8778 && resultCode == Activity.RESULT_OK){
checkPermissions();
if (ContextCompat.checkSelfPermission(
MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) ==
PackageManager.PERMISSION_GRANTED) {
//build the uri
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
verifyStoragePermissions(MainActivity.this);
String baseDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
StringBuilder text = new StringBuilder();
//request permission
final int REQUEST_CODE_ASK_PERMISSIONS = 1;
final String[] REQUIRED_SDK_PERMISSIONS = new String[] {
Manifest.permission.WRITE_EXTERNAL_STORAGE};
try {
BufferedReader br = new BufferedReader(new
FileReader(("/storage/emulated/0/download/paperclip.txt")));
new AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_dialog_alert).setTitle("File
Name").setMessage("YAY").show();
String line=br.readLine();
while (!((line).equals(null))) {
text.append(line);
text.append('\n');
new AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_dialog_alert).setTitle("File
Name").setMessage(line + "great").show();
}
br.close();
} catch (IOException e) {
new AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_dialog_alert).setTitle("File
Name").setMessage("In the catch!" + e).show();
}
String result = text.toString();
new AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("File Info")
.setMessage(result + "result")
.show();
// You can use the API that requires the permission.
new AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_dialog_alert) .setTitle("File
Name").setMessage("GRANTED").show();
//performAction(...);
}
}
}
protected void checkPermissions() {
new AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_dialog_alert) .setTitle("File Name").setMessage("In
Check Permissions").show();
final List<String> missingPermissions = new ArrayList<String>();
// check all required dynamic permissions
for (final String permission : REQUIRED_SDK_PERMISSIONS) {
final int result = ContextCompat.checkSelfPermission(this, permission);
if (result != PackageManager.PERMISSION_GRANTED) {
missingPermissions.add(permission);
}
}
if (!missingPermissions.isEmpty()) {
// request all missing permissions
final String[] permissions = missingPermissions
.toArray(new String[missingPermissions.size()]);
ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE_ASK_PERMISSIONS);
} else {
final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
onRequestPermissionsResult(REQUEST_CODE_ASK_PERMISSIONS, REQUIRED_SDK_PERMISSIONS,
grantResults);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
@NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_PERMISSIONS:
for (int index = permissions.length - 1; index >= 0; --index) {
if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
// exit the app if one permission is not granted
Toast.makeText(this, "Required permission '" + permissions[index]
+ "' not granted, exiting", Toast.LENGTH_LONG).show();
finish();
return;
}
}
// all permissions were granted
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.listVeiw);
SharedPreferences sharedPreferences =
getApplicationContext().getSharedPreferences("com.example.notepadr", Context.MODE_PRIVATE);
//Dealing with saving and stuff!!!!!
HashSet<String> set = (HashSet<String>) sharedPreferences.getStringSet("notes", null);
if (set==null){
notes.add("Example note");
}else{
notes = new ArrayList(set);
}
arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, notes);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
Intent intent = new Intent(getApplicationContext(), NoteEditorActivity.class);
intent.putExtra("noteId", i);
startActivity(intent);
}
});
public类MainActivity扩展了AppCompatActivity{
静态ArrayList notes=新建ArrayList();
静态阵列适配器阵列适配器;
//请求许可
私有最终静态int请求\代码\请求\权限=1;
私有静态最终字符串[]必需的\u SDK\u权限=新字符串[]{
Manifest.permission.WRITE\u EXTERNAL\u STORAGE};
@凌驾
公共布尔onCreateOptions菜单(菜单)
{
MenuInflater MenuInflater=getMenuInflater();
菜单充气(右菜单添加注释菜单,菜单);
返回super.onCreateOptions菜单(菜单);
}
//存储权限
专用静态最终整数请求\外部\存储=1;
私有静态字符串[]权限\存储={
Manifest.permission.READ_外部存储,
Manifest.permission.WRITE\u外部存储
};
公共静态无效verifyStoragePermissions(活动){
//检查我们是否有写权限
int permission=ActivityCompat.checkSelfPermission(activity,Manifest.permission.WRITE\u外部存储);
if(权限!=PackageManager.permission\u已授予){
//我们没有权限,因此请提示用户
ActivityCompat.requestPermissions(
活动,
存储许可,
请求外部存储
);
}
}
@凌驾
公共布尔值OnOptionItemSelected(@NonNull MenuItem item){
super.onOptionsItemSelected(项目);
if(item.getItemId()==R.id.open\u注释){
//从文件中获取txt并作为文本发送到textEditor操作
//选择文件
意向意向=新意向(意向.行动\u获取\u内容);
//intent.addCategory(intent.CATEGORY\u可打开);
intent.setType(“*/*”);
startActivityForResult(
Intent.createChooser(Intent,“选择文件”),
8778
);
}
if(item.getItemId()==R.id.new\u注释){
//新注释
Intent Intent=新的Intent(getApplicationContext(),NoteEditorActivity.class);
星触觉(意向);
返回true;
}
返回false;
}
@RequiresApi(api=Build.VERSION\u CODES.O)
@凌驾
//以字符串形式获取文件路径
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==8778&&resultCode==Activity.RESULT\u确定){
检查权限();
if(ContextCompat.checkSelfPermission(
MainActivity.this、Manifest.permission.READ\u外部存储)==
PackageManager.权限(已授予){
//构建uri
getExternalStoragePublicDirectory(Environment.DIRECTORY\u下载);
验证StoragePermissions(MainActivity.this);
String baseDir=Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
StringBuilder text=新的StringBuilder();
//请求许可
最终整数请求\代码\请求\权限=1;
最终字符串[]所需的\u SDK\u权限=新字符串[]{
Manifest.permission.WRITE\u EXTERNAL\u STORAGE};
试一试{
BufferedReader br=新的BufferedReader(新的
FileReader((“/storage/simulated/0/download/paperclip.txt”);
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报).setTitle(“文件
Name”).setMessage(“YAY”).show();
String line=br.readLine();
而(!((line).equals(null))){
text.append(行);
text.append('\n');
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报).setTitle(“文件
Name“).setMessage(行+“great”).show();
}
br.close();
}捕获(IOE异常){
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报).setTitle(“文件
Name“).setMessage(“在catch中!”+e).show();
}
字符串结果=text.toString();
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报)
.setTitle(“文件信息”)
.setMessage(结果+“结果”)
.show();
//您可以使用需要该权限的API。
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报).setTitle(“文件
名称“).setMessage(“已授予”).show();
//绩效(…);
}
}
}
受保护的无效检查权限(){
新建AlertDialog.Builder(MainActivity.this)
.setIcon(android.R.drawable.ic_对话框_警报).setTitle(“文件名”).setMessage(“在
检查权限“).show();
final List missingPermissions=new ArrayList();
//检查所有必需的动态权限
for(最终字符串权限:必需的\u SDK\u权限){
最终int结果=ContextCompat.checkSelfPermission
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="-16dp"
tools:layout_editor_absoluteY="-69dp">
<Button
android:id="@+id/storage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Storage"
android:layout_marginTop="16dp"
android:padding="8dp"
android:layout_centerHorizontal="true"/>
<ListView
android:id="@+id/listVeiw"
android:layout_width="400dp"
android:layout_height="732dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="false"
android:layout_marginTop="3dp"
android:layout_marginEnd="7dp"
android:layout_marginBottom="-3dp"
android:scrollbarSize="5dp"
android:scrollbarStyle="outsideInset" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.notepadr">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:requestLegacyExternalStorage="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.NotePadR">
<activity android:name=".NoteEditorActivity"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
enter code here <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>