小编com*_*ghz的帖子

Android用ACTION_GET_CONTENT打开一个文件导致不同的Uri

我试图通过使用打开文件Intent.ACTION_GET_CONTENT. Android文件浏览器

根据Android版本/设备品牌,文件浏览器打开,我得到以下结果:

Downloads以下位置选择文件:

content://com.android.providers.downloads.documents/document/446
Run Code Online (Sandbox Code Playgroud)

Fotos以下位置选择文件:

content://media/external/images/media/309
Run Code Online (Sandbox Code Playgroud)

FileCommander以下位置选择文件:

file:///storage/emulated/0/DCIM/Camera/20141027_132114.jpg
Run Code Online (Sandbox Code Playgroud)

我可以打开所有这些文件除了当我尝试打开从文件Downloads,,Audio,Afbeeldingen(图片)

我可能无法处理这种Uri: content://com.android.providers.downloads.documents/document/446

我试过以下的事情:

  • 尝试通过新文件(uri.getPath())打开文件.File.exists()返回false.
  • 尝试通过getContext().getContentResolver().openInputStream(uri)打开/访问该文件.结果进入FileNotFoundException
  • 尝试使用以下代码打开文件:

    public static String getRealPathFromURI_API19(Context context, Uri uri) {
    
    Log.i("uri", uri.getPath());
    String filePath = "";
    if (uri.getScheme().equals("file")) {
        return uri.getPath();
    } else if (DocumentsContract.isDocumentUri(context, uri)) {
        String wholeID = DocumentsContract.getDocumentId(uri);
        Log.i("wholeID", wholeID);
        // Split at colon, use second item in the array
        String[] splits = wholeID.split(":");
    if (splits.length == 2) {
        String …
    Run Code Online (Sandbox Code Playgroud)

android file-browser

33
推荐指数
1
解决办法
5万
查看次数

Android在调用super.OnCreate()之前停止onCreate()中的活动

我正在创建一个带有片段的导航抽屉活动的应用程序。在应用程序每次冷启动时,我都会执行一些初始化代码,并在其中加载以下内容:

  • 用户会话(如果用户已登录)
  • 注册改造服务
  • 从服务器获取一些数据以继续启动应用程序。

这是冷启动时我的应用程序的流程:

  • 启动MainActivity并验证用户会话。
  • 如果会话有效,则我们打开CoreActivity
  • 如果没有,那么我们打开LoginActivity

在某些非活动状态下将应用程序置于前台后,Android会尝试重新启动当前的活动。这意味着我的初始化代码被绕过并被CoreActivity.onCreate()执行。

我的所有活动(MainActivity除外)都在扩展以下超级活动:

public abstract class MasterActivity extends AppCompatActivity {

@Override
protected final void onCreate(Bundle savedInstanceState) {
    this.supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    if (!CrmContext.getInstance().verifyContextSet(this)) {
        return;
    }
    super.onCreate(savedInstanceState);
    onCreateAfterContext(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)

在CrmContext中:

public boolean verifyContextSet(final Context context) {
    boolean isContextSet = applicationContext != null;
    if (isContextSet) {
        return true;
    }
    Intent intent = new Intent(context, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    context.startActivity(intent);
    return false;
}
Run Code Online (Sandbox Code Playgroud)

verifyContextSet()我做一些检查,以确保应用程序已正确加载。如果用户会话未正确加载。

我的问题:

如果该应用程序位于最前面,则将 …

resume android android-fragments android-activity

8
推荐指数
1
解决办法
1676
查看次数