↓ Dieses Ding
Ich hatte das Gefühl, dass es viele Informationen gab, aber diese kamen nicht unerwartet heraus, also schrieb ich ein Memo.
SomeActivity.java
//Voraussetzung für die Ausführung innerhalb der Aktivität
private void showShareChooser() {
File tempFile = new File(getApplicationContext().getExternalCacheDir(), tempImgFilePath);
//Wenn Sie möchten, dass der URI die Datei freigibt, müssen Sie ihn abrufen, indem Sie den Namen der Autorität angeben, die später über FileProvider beschrieben wird.
Uri uri = FileProvider.getUriForFile(getApplicationContext()
, getApplicationContext().getPackageName() + ".provider"
, tempFile);
ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder.from(this);
builder.setChooserTitle(chooserTitle) //Titel beim Teilen
.setSubject(subject) //Gegenstand. Wie es verwendet wird, hängt von der freigegebenen App ab
.setText(text) //Text. Wie es verwendet wird, hängt von der freigegebenen App ab
.setStream(uri) //Geben Sie beim Freigeben einer Datei deren URI an
.setType("image/jpeg"); //MIME-Typ der im Stream angegebenen Datei
//Erteilen Sie die Leseberechtigung für URI
Intent intent = builder.createChooserIntent().addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//Wenn Sie einen Rückruf erhalten möchten, verwenden Sie diese Absicht, um die Aktivität zu starten
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, SNS_SHARE);
}
//Wenn Sie die Ergebnisse nicht erhalten müssen, können Sie einfach mit dem Builder beginnen
// builder.startChooser();
}
Wenn Sie die Rücksendung erhalten möchten, können Sie sie wie gewohnt mit "onActivityResult" erhalten.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case SNS_SHARE:
//Erhalten Sie die Rücksendung und tun Sie etwas
//resultCode ist immer Null, also RESULT_Beurteilen Sie nicht mit OK
doSomething();
break;
default:
super.onActivityResult(requestCode, resultCode, data);
break;
}
}
Wenn Sie Bilder usw. freigeben, kann Bitmap nicht so freigegeben werden, wie es ist. Daher muss es einmal in einer Datei gespeichert werden. Darüber hinaus muss das Lesen vom Speicherziel wie folgt zugelassen werden.
Geben Sie zunächst den Pfad in XML an.
src/main/res/xml/provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-cache-path name="cache" path="." />
</paths>
external-cache-path
etc. ändert sich je nach Speicherziel.
Obwohl in englischer Sprache, siehe Offizielle FileProvider-Referenz.
Geben Sie dann diesen Anbieter in "AndroidManifest.xml" an.
AndroidManifest.xml
<manifest
package="com.example"
xmlns:android="http://schemas.android.com/apk/res/android">
:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
:
</application>
:
</manifest>
Recommended Posts