在 android 中共享 apk
Sharing apk in android
我正在尝试借助按钮共享 apk,它在昨天之前工作正常,但现在当我按下共享 apk 按钮时,应用程序崩溃了,我不知道它出了什么问题,但在运行 选项卡显示下面 java 代码的最后一行有问题。
这是java代码
btnShareApk.setOnClickListener (new View.OnClickListener ( ) {
@Override
public void onClick(View v) {
ApplicationInfo applicationInfo = getApplicationContext ().getApplicationInfo ();
String apkPath = applicationInfo.sourceDir;
Intent intent2 = new Intent (Intent.ACTION_SEND);
intent2.setType ("application/vnd.android.package-archive");
intent2.putExtra (Intent.EXTRA_STREAM, Uri.fromFile (new File (apkPath) ));
startActivity (Intent.createChooser (intent2,"Share Apk via"));
}
});
这是xml代码
<Button
android:id="@+id/btnShareApk"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:layout_marginStart="10dp"
android:background="@drawable/rounded_button_green"
android:text="Share Apk"
android:textColor="@color/colorAccent"
android:textSize="20sp"
android:textStyle="bold" />
这是来自 运行 选项卡的日志
Process: com.faisalnazir.computerapplications, PID: 6184
android.os.FileUriExposedException: file:///data/app/com.faisalnazir.computerapplications-mLlY2QJaNLHfnA_i9z-hoQ%3D%3D/base.apk exposed beyond app through ClipData.Item.getUri()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:2083)
at android.net.Uri.checkFileUriExposed(Uri.java:2388)
at android.content.ClipData.prepareToLeaveProcess(ClipData.java:977)
at android.content.Intent.prepareToLeaveProcess(Intent.java:10820)
at android.content.Intent.prepareToLeaveProcess(Intent.java:10826)
at android.content.Intent.prepareToLeaveProcess(Intent.java:10805)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1712)
at android.app.Activity.startActivityForResult(Activity.java:5319)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
at android.app.Activity.startActivityForResult(Activity.java:5263)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
at android.app.Activity.startActivity(Activity.java:5648)
at android.app.Activity.startActivity(Activity.java:5616)
at com.faisalnazir.computerapplications.ShareActivity.onClick(ShareActivity.java:62)
at android.view.View.performClick(View.java:7256)
at android.view.View.performClickInternal(View.java:7218)
at android.view.View.access00(View.java:824)
at android.view.View$PerformClick.run(View.java:27719)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:228)
at android.app.ActivityThread.main(ActivityThread.java:7782)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)
感谢任何形式的帮助
尝试将 apk 文件复制到您的应用程序缓存文件夹,然后使用 FileProvider.getUriForFile
将 File
解析为 Uri
。
Link:
https://developer.android.com/reference/androidx/core/content/FileProvider
https://developer.android.com/reference/androidx/core/content/FileProvider#GetUri
尝试将其添加到 onCreate
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
您可以使用 Intent 分享您的应用。喜欢:
Intent sharingIntent = new Intent(intent.ACTION_SEND);
我正在尝试借助按钮共享 apk,它在昨天之前工作正常,但现在当我按下共享 apk 按钮时,应用程序崩溃了,我不知道它出了什么问题,但在运行 选项卡显示下面 java 代码的最后一行有问题。
这是java代码
btnShareApk.setOnClickListener (new View.OnClickListener ( ) {
@Override
public void onClick(View v) {
ApplicationInfo applicationInfo = getApplicationContext ().getApplicationInfo ();
String apkPath = applicationInfo.sourceDir;
Intent intent2 = new Intent (Intent.ACTION_SEND);
intent2.setType ("application/vnd.android.package-archive");
intent2.putExtra (Intent.EXTRA_STREAM, Uri.fromFile (new File (apkPath) ));
startActivity (Intent.createChooser (intent2,"Share Apk via"));
}
});
这是xml代码
<Button
android:id="@+id/btnShareApk"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:layout_marginStart="10dp"
android:background="@drawable/rounded_button_green"
android:text="Share Apk"
android:textColor="@color/colorAccent"
android:textSize="20sp"
android:textStyle="bold" />
这是来自 运行 选项卡的日志
Process: com.faisalnazir.computerapplications, PID: 6184
android.os.FileUriExposedException: file:///data/app/com.faisalnazir.computerapplications-mLlY2QJaNLHfnA_i9z-hoQ%3D%3D/base.apk exposed beyond app through ClipData.Item.getUri()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:2083)
at android.net.Uri.checkFileUriExposed(Uri.java:2388)
at android.content.ClipData.prepareToLeaveProcess(ClipData.java:977)
at android.content.Intent.prepareToLeaveProcess(Intent.java:10820)
at android.content.Intent.prepareToLeaveProcess(Intent.java:10826)
at android.content.Intent.prepareToLeaveProcess(Intent.java:10805)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1712)
at android.app.Activity.startActivityForResult(Activity.java:5319)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
at android.app.Activity.startActivityForResult(Activity.java:5263)
at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
at android.app.Activity.startActivity(Activity.java:5648)
at android.app.Activity.startActivity(Activity.java:5616)
at com.faisalnazir.computerapplications.ShareActivity.onClick(ShareActivity.java:62)
at android.view.View.performClick(View.java:7256)
at android.view.View.performClickInternal(View.java:7218)
at android.view.View.access00(View.java:824)
at android.view.View$PerformClick.run(View.java:27719)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:228)
at android.app.ActivityThread.main(ActivityThread.java:7782)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:981)
感谢任何形式的帮助
尝试将 apk 文件复制到您的应用程序缓存文件夹,然后使用 FileProvider.getUriForFile
将 File
解析为 Uri
。
Link:
https://developer.android.com/reference/androidx/core/content/FileProvider https://developer.android.com/reference/androidx/core/content/FileProvider#GetUri
尝试将其添加到 onCreate
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
您可以使用 Intent 分享您的应用。喜欢:
Intent sharingIntent = new Intent(intent.ACTION_SEND);