2016-03-21 9 views
0

i i Code dir erstellen folgenden geschrieben versuchen Datei dir zu angeschlossenem USB-Speicher zu erstellen:Datei kann nicht USB-Speicher schreiben

public class MainActivity extends AppCompatActivity { 

    private static final String ACTION_USB_PERMISSION = "com.example.usbtest.USB_PERMISSION"; 
    UsbManager mUsbManager; 
    UsbDevice device; 

    String s = null; 
    TextView tvusb; 

    private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (ACTION_USB_PERMISSION.equals(action)) { 
       synchronized (this) { 
        UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 
        if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { 
         if (device != null) { 
          Toast.makeText(getApplicationContext(), "permission allowed" + device, Toast.LENGTH_LONG).show(); 
          //call method to set up device communication 
         } 
        } else { 
         Toast.makeText(getApplicationContext(), "permission not allowed" + device, Toast.LENGTH_LONG).show(); 
         Log.d("usb", "permission denied for device " + device); 
        } 
       } 
      } 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     tvusb = (TextView) findViewById(R.id.tvusb); 

     mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE); 

     HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList(); 
     Iterator<UsbDevice> deviceIterator = deviceList.values().iterator(); 
     while (deviceIterator.hasNext()) { 
      device = deviceIterator.next(); 

      s = device.getDeviceName(); 

      int pid = device.getProductId(); 
      int vid = device.getVendorId(); 
      device = deviceList.get(s); 

      tvusb.setText(s + "\n" + Integer.toString(pid) + "\n" + Integer.toString(vid)); 
     } 


     PendingIntent mPermissionIntent; 


     mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); 

     IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); 


     registerReceiver(mUsbReceiver, filter); 

     mUsbManager.requestPermission(device, mPermissionIntent); 


     File fileContact = new File(s, "Contact"); 
     if (!fileContact.exists()) { 
      fileContact.mkdirs(); 
     } 

     if (!confirmDir(fileContact)) { 

      Toast.makeText(getApplicationContext(), "Unable to create " + String.valueOf(fileContact), Toast.LENGTH_LONG).show(); 

     } 

    } 

    private static boolean confirmDir(File dir) { 
     if (dir.isDirectory()) return true; // already exists 
     if (dir.exists()) return false;  // already exists, but is not a directory 
     return dir.mkdirs();     // create it 
    } 

} 

manifestiert:

<manifest 

    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <uses-permission android:name="android.permission.usb"></uses-permission> 

    <uses-feature android:name="android.hardware.usb.host"/> 
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/> 

    <uses-feature android:name="android.hardware.usb.accessory"/> 

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <uses-library android:name="com.android.future.usb.accessory"/> 


     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 

       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"/> 
      </intent-filter> 

      <meta-data 
       android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" 
       android:resource="@xml/accessory_filter"/> 

     </activity> 

    </application> 

</manifest> 

ich auch geschrieben habe - Datei fileContact = new File ("/ storage/emuliert/0", "Kontakt");

Aber ich bin nicht in der Lage, dir zu USB-Speicher zu erstellen.

Wie kann ich dir zu USB-Speicher erstellen?

+0

Können Sie Ihre Manifest-Datei hinzufügen? –

+0

Ich habe Manifest beigefügt. – deepak

+0

@LaurIvan Bitte überprüft meine Manifest-Datei. Ich denke, es hat alle erforderlichen Berechtigungen für die Erstellung von Datei auf USB-Speicher. – deepak

Antwort

0

Die Art, wie ich Ihr Problem verstehe, ist, dass Sie eine Datei auf dem externen Speicher schreiben möchten. In diesem Fall sollten Sie nur die Berechtigungen *EXTERNAL* benötigen. Nach the documentation müssen Sie:

  • prüft, ob die Medien mit so etwas wie vorhanden und beschreibbar ist:

    /* Checks if external storage is available for read and write */ 
    public boolean isExternalStorageWritable() { 
        String state = Environment.getExternalStorageState(); 
        if (Environment.MEDIA_MOUNTED.equals(state)) { 
         return true; 
        } 
        return false; 
    } 
    

    (Code wörtlich aus der Quelle)

  • Dann Sie Sie müssen getExternalStoragePublicDirectory() oder getExternalFilesDir() verwenden, abhängig von den Richtlinien Ihrer Dateien (öffentlich oder privat für Anwendungen).

Für das Wechselmedium zugreifen, sollten Sie die Speicherzugriffs Framework verwenden wie in this SO post mit dem ACTION_CREATE_DOCUMENT skizziert.

+0

ich habe den pendrive über das otg-kabel angeschlossen. also möchte ich auf diesem pendrive eine datei erstellen. Damit kann ich nur auf meinen internen Speicher zugreifen. – deepak