2016-10-16 136 views
0

當我將活動附加到「打開方式」列表時,如何才能在Intent中獲取APK文件的路徑?從意圖獲取APK的URI路徑

代碼清單的:

活動
<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

您可以通過getIntent().getData()Uri下載到APK。

如果Uri恰好有一個file方案,您可以撥打getPath()Uri得到的路徑。

更可能的是,Uri將有一個content計劃,在這種情況下,您不能獲得路徑,因爲不必是文件,更不用說可以通過文件系統訪問的文件。您需要使用其他API的consume the content identified by the Uri,如ContentResolveropenInputStream()

儘管不太可能,但可以想象Uri將具有另一種方案,例如android.resourcehttpandroid.resource將由openInputStream()處理。 http將需要HTTP客戶端API,https也是如此。對於其他任何方案都是如此。

理想情況下,您需要增加<intent-filter>以添加<data>元素,以便將您的應用限制爲您支持的方案。