Whatsapp 文件夹位置从内部存储更改

时间:2021-06-23 10:11:28

标签: android whatsapp mobile-application

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

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

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

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

任何人都可以帮忙???

2 个答案:

答案 0 :(得分:0)

适用于安卓 11 String targetPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/media/com.whatsapp/WhatsApp/Media/.Statuses";

对于其他人 String targetPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/WhatsApp/Media/.Statuses";

答案 1 :(得分:0)

首先使用这个

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);

    } 

Manifest 应该是这样的

<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;
}