从intent获取APK的URI路径

时间:2016-10-16 11:16:47

标签: java android android-intent

当我将活动附加到“打开方式...”列表时,如何在Intent中获取APK文件的路径?

清单代码:

<activity
        android:name=".InstallActivity"
        android:label="@string/title_activity_install"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter >
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="application/vnd.android.package-archive" />
        </intent-filter>
</activity>

活动代码(InstallActivity.java)

public class InstallActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_install);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
    }
}

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以通过Uri获取getIntent().getData()到APK。

如果Uri恰好有file计划,您可以在getPath()上致电Uri以获取路径。

更有可能的是,Uri将采用content方案,在这种情况下,您无法获取路径,因为不必是文件,更不用说您可以通过文件系统。您需要consume the content identified by the Uri使用其他API,例如ContentResolveropenInputStream()

可以想象Uri会有另一种方案,例如android.resourcehttp,但不太可能。 android.resource将由openInputStream()处理。 http需要HTTP客户端API,https也需要。等等任何其他方案。

理想情况下,您需要扩充<intent-filter>以添加<data>元素,以将您的应用限制为您支持的方案。