2013-06-30 10 views
7

Ich verwende diesen Code, um die APK-Datei der App an ein anderes Gerät zu senden. Es funktioniert auf Android 2.3.3, funktioniert aber nicht auf Android 4+.APK-Datei senden android

Wo ist das Problem?

Ich habe die getpackageCodePath() geloggt und es gibt die APK-Datei auf Android 4+, aber der ganze Code funktioniert nicht, und wenn Bluetooth startet, sendet es nichts.

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)); 
+0

Sind Sie sicher, dass Ihr Android 4.0-Gerät ist ausgestattet zu handhaben Bluetooth-Übertragungen? Haben Sie versucht, eine Datei über Bluetooth mit OI-Datei-Manager oder etwas zu senden? –

+0

ja, und ich kann Datei über mein Telefon mit Dateimanager senden – Ata

+0

@Ata Hast du irgendeine Antwort? –

Antwort

1

Ändern Sie die Zeile:

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

zu

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

und es sollte in allen 4.x Geräten arbeiten. Alternativ können Sie auch so etwas tun:

Beide der oben genannten Möglichkeiten arbeiten für mich.

0

Sie können getApplicationInfo().publicSourceDir anstelle von getApplication().getPackageCodePath() den Pfad zu Ihrer App APK zu erhalten, verwenden Sie dann, dass ein in ACTION_SENDIntent die Datei über Bluetooth zu senden.

prüfen hier für ein Beispiel: Bluetooth File transfer on Android(even restricted types)

12

ich Code unten verwenden für Senden apk. und es funktioniert

try{ 
    ArrayList<Uri> uris = new ArrayList<Uri>(); 
    Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); 
    sendIntent.setType("application/*"); 
    uris.add(Uri.fromFile(new File(getApplicationInfo().publicSourceDir))); 
    sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); 
    startActivity(Intent.createChooser(sendIntent, null)); 

}catch(Exception e){} 
+1

+1 Ich habe diesen Code ausprobiert, er funktioniert in Samsung-Geräten, funktioniert aber nicht auf Moto G2. Bitte lassen Sie mich wissen, wie Sie das Problem lösen können –

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)))); 
      } 
0

Ich hoffe, es funktioniert:

// 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")); 
0
ArrayList<Uri> uris = new ArrayList<Uri>(); 
    Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); 
sendIntent.setType("*/*"); 
uris.add(Uri.fromFile(new File(getApplicationInfo().publicSourceDir))); 
sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); 
startActivity(Intent.createChooser(sendIntent, null)); 

Verwendung / dies funktionierte für mich