【问题标题】:Whatsapp folder location changed from internal storageWhatsapp 文件夹位置从内部存储更改
【发布时间】:2021-06-23 10:11:28
【问题描述】:

我有一个状态保护程序。由于文件夹位置已更改,状态未显示在状态保护程序中。

我可以使用什么路径来获取它们?

String targetPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/WhatsApp/Media/.Statuses";

以前的文件夹位置是这个...

谁能帮忙???

【问题讨论】:

  • 这个问题应该只有android 11才有吧?
  • 我用过这个但没有锻炼private static final File NORMSTATUS_DIRECTORY = new File(Environment.getExternalStorageDirectory() + File.separator + "/Android/media/com.whatsapp/WhatsApp/Media/.Statuses");
  • 是的,我最近将我的 android 版本从 10 更新到 11,从那里开始出现这个问题。

标签: android whatsapp mobile-application


【解决方案1】:

对于 Android 11:

String targetPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/media/com.whatsapp/WhatsApp/Media/.Statuses";

对于其他版本:

String targetPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/WhatsApp/Media/.Statuses";   

【讨论】:

    【解决方案2】:

    首先使用这个

    public static final File android_status = new File(Environment.getExternalStorageDirectory() +
            File.separator + "WhatsApp/Media/.Statuses");
    
    public static final File android_11_status = new File(Environment.getExternalStorageDirectory() +
            File.separator + "Android/media/com.whatsapp/WhatsApp/Media/.Statuses");
    

    现在检查用户设备中的目录。

    if (Common.android_status.exists()) {
    
            execute(Common.android_status);
    
        } else if (Common.android_11_status.exists()) {
    
            execute(Common.android_11_status);
    
        } 
    

    清单应该是这样的

    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission
        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        android:minSdkVersion="30"
        tools:ignore="ScopedStorage" />
    <uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="29" />
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:requestLegacyExternalStorage="true"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    

    是的,别忘了以这种方式为 Android 11 请求运行时权限

    public class PermissionActivity extends AppCompatActivity {
    
    private static final int REQUEST_PERMISSIONS = 1234;
    private static final String[] PERMISSIONS = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };
    private static final String MANAGE_EXTERNAL_STORAGE_PERMISSION = "android:manage_external_storage";
    
    private final Handler handler = new Handler(Looper.getMainLooper());
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
    
        if (!arePermissionDenied()){
            next();
            return;
        }
    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && arePermissionDenied()) {
    
            requestPermissions(PERMISSIONS, REQUEST_PERMISSIONS);
        }
    
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        if (!arePermissionDenied()) {
            next();
        }
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_PERMISSIONS && grantResults.length > 0) {
            if (arePermissionDenied()) {
                // Clear Data of Application, So that it can request for permissions again
                ((ActivityManager) Objects.requireNonNull(this.getSystemService(ACTIVITY_SERVICE))).clearApplicationUserData();
                recreate();
            } else {
                next();
            }
        }
    }
    
    private void next() {
    
        handler.postDelayed(() -> {
            startActivity(new Intent(PermissionActivity.this, MainActivity.class));
            finish();
        }, 1000);
    
    }
    
    private boolean arePermissionDenied() {
    
        for (String permissions : PERMISSIONS) {
            if (ActivityCompat.checkSelfPermission(getApplicationContext(), permissions) != PackageManager.PERMISSION_GRANTED) {
                return true;
            }
        }
        return false;
    }
    

    【讨论】:

    • 我将项目更新到 android 11 后,新文件位置在 android 10 上运行良好,但它没有获得这些状态。
    • 你应该在此处堆栈跟踪并粘贴日志错误的错误是什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多