当我将活动附加到“打开方式...”列表时,如何在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();
}
});
}
}
谢谢!
答案 0 :(得分:0)
您可以通过Uri
获取getIntent().getData()
到APK。
如果Uri
恰好有file
计划,您可以在getPath()
上致电Uri
以获取路径。
更有可能的是,Uri
将采用content
方案,在这种情况下,您无法获取路径,因为不必是文件,更不用说您可以通过文件系统。您需要consume the content identified by the Uri
使用其他API,例如ContentResolver
和openInputStream()
。
可以想象Uri
会有另一种方案,例如android.resource
或http
,但不太可能。 android.resource
将由openInputStream()
处理。 http
需要HTTP客户端API,https
也需要。等等任何其他方案。
理想情况下,您需要扩充<intent-filter>
以添加<data>
元素,以将您的应用限制为您支持的方案。