7

このコードを使用して、アプリの APK ファイルを別のデバイスに送信します。Android 2.3.3 では動作しますが、Android 4 以降では動作しません。

問題はどこだ?

をログに記録したgetpackageCodePath()ところ、Android 4+ で APK ファイルが返されましたが、コード全体が機能しておらず、Bluetooth が起動しても何も送信されません。

ArrayList<Uri> uris = new ArrayList<Uri>();
Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
sendIntent.setType("application/vnd.android.package-archive");
uris.add(Uri.parse(getApplication().getPackageCodePath()));
sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(Intent.createChooser(sendIntent, null));
4

6 に答える 6

1

行を変更します:

uris.add(Uri.parse(getApplication().getPackageCodePath()));

uris.add(Uri.fromFile(new File(getApplicationInfo().publicSourceDir)));

すべての 4.x デバイスで動作するはずです。または、次のようなこともできます。

ApplicationInfo app=getPackageManager().getApplicationInfo("packageName", 0);                       
uris.add(Uri.fromFile(new File(app.publicSourceDir)));

上記の方法は両方とも私にとってはうまくいきます。

于 2013-12-19T10:04:57.227 に答える
0
InputStream in = null;
            OutputStream out = null;
            File apkPublicFilePath = new File(
                    Environment
                            .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
                    "myapk.apk");
            try {

                in = getResources().openRawResource(R.raw.myapk);
                out = new FileOutputStream(apkPublicFilePath);
                byte[] buffer = new byte[1024];
                int length;
                while ((length = in.read(buffer)) > 0) {
                    out.write(buffer, 0, length);
                }

                // Close the streams
                out.flush();
                out.close();
                in.close();
            } catch (IOException e) {
                Log.d(TAG, "Error in copy files");
            }

            Intent sendIntent = new Intent();
            sendIntent.setAction(Intent.ACTION_SEND);
            sendIntent.putExtra(Intent.EXTRA_STREAM,

            Uri.fromFile(apkPublicFilePath.getAbsoluteFile()));
            try {
                sendIntent.setType("application/vnd.android.package-archive");
                startActivity(Intent.createChooser(
                        sendIntent,
                        PersianReshape.reshape(getResources().getString(
                                R.string.msg_send))));
            } catch (Exception e) {
                sendIntent.setType("*/*");
                startActivity(Intent.createChooser(
                        sendIntent,
                        PersianReshape.reshape(getResources().getString(
                                R.string.msg_send))));
            }
于 2015-02-09T15:08:11.917 に答える
0

私はそれがうまくいくことを願っています:

// Get current ApplicationInfo to find .apk path
ApplicationInfo app = getApplicationContext().getApplicationInfo();
String filePath = app.sourceDir;

Intent intent = new Intent(Intent.ACTION_SEND);

// MIME of .apk is "application/vnd.android.package-archive".
// but Bluetooth does not accept this. Let's use "*/*" instead.
intent.setType("*/*");

// Only use Bluetooth to send .apk
intent.setPackage("com.android.bluetooth");

// Append file and send Intent
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(filePath)));
startActivity(Intent.createChooser(intent, "Share app"));
于 2015-05-03T16:04:21.763 に答える