2016-10-16 8 views
0

「Open with ..」リストにアクティビティを添付したとき、インテントの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

Uriは、getIntent().getData()を介してAPKに送信できます。

そのUrifileスキームを持つようになった場合は、パスを取得するためにUrigetPath()を呼び出すことができます。

さらにUriにはcontentスキームがあります。この場合、ファイルシステムでアクセスできるファイルはもちろん、ファイルでなくてもパスを取得することはできません。 ContentResolveropenInputStream()など、他のAPIを使用してconsume the content identified by the Uriにする必要があります。

Uriandroid.resourceまたはhttpのような別のスキームを持つことは考えられません。 android.resourceopenInputStream()で処理されます。 httpは、httpsのようにHTTPクライアントAPIを必要とします。他のスキームについても同様です。

<intent-filter>を追加して、<data>要素を追加して、サポートしているスキームにアプリを制約するのが理想的です。

関連する問題