2016-10-16 15 views
0

Wie kann ich Pfad zu APK-Datei in Intent erhalten, wenn ich meine Aktivität an "Öffnen mit .." Liste anschloss?Erhalten Sie einen URI-Pfad zu APK von Absicht

Code of manifest:

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

Code of Aktivität (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(); 
     } 
    }); 
    } 
} 

Dank!

Antwort

0

Sie können die Uri an die APK über getIntent().getData() erhalten.

Wenn die Uri ein file Schema haben geschieht, können Sie getPath() auf den Uri rufen Sie den Pfad zu bekommen.

Wahrscheinlich wird die Uri ein Schema content haben, in diesem Fall können Sie den Pfad nicht erhalten, da es keine Datei sein muss, geschweige denn eine, auf die Sie über das Dateisystem zugreifen können. Sie müssen consume the content identified by the Uri mit anderen APIs wie ContentResolver und openInputStream().

Es ist denkbar, wenn auch unwahrscheinlich, dass die Uri ein anderes Schema wie android.resource oder http haben wird. android.resource wird von openInputStream() behandelt. http würde eine HTTP-Client-API erfordern, ebenso wie https. Und so weiter für andere Programme.

Idealerweise erweitern Sie Ihre <intent-filter> um <data> Elemente, um Ihre App auf die von Ihnen unterstützten Schemas einzuschränken.

Verwandte Themen