メールに署名するなど、クライアントが認証を一切しないようにしたいと思います。クライアントは、クリックするだけですべての共有ファイルを取得する必要があります。URIでGoogleドライブからファイルをダウンロードします(AndroidのGoogleドライブAPIなし)
多くの場所で、HTTP GETで行うことができます。私はGoogleドライブでさまざまなタイプのファイルとサイズで試しましたが、私のコードでは約50kbのファイルが与えられていますが、これはもちろん読めません。
ソースファイルが "Poocha.mp3" である:ここでは例として
。
私はこのファイルに対してGoogleから返された共有可能なIDを持っています。
このID、つまり共有可能な文字列は共有可能であることを確認しました。
Androidマニフェストですべての権限を取得しました。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
これは、エミュレータ以外のライブデバイスでテストしています。
このリンクを貼り付けると、「https://drive.google.com/uc?export=download&id=0B5Isk4aTJApuZE9sVzg2MUxvc0U」、 というファイルがブラウザに正しくダウンロードされます。
ただし、以下のコードはドライブリンクのいずれに対しても機能していません。
しかし、私のサーバーに同じファイルをアップロードしてURLを変更すると、ファイルは以下の同じコードで正しくダウンロードされます。私は "pictures.jpg"ファイルでも同じことを試みましたが、Googleドライブのすべてのファイルは不完全な50〜54 KBのファイルを提供し、同じコードがサーバー上の同じファイルに対して機能します。
マイコード:
protected String doInBackground(String... f_url) {
int count;
String id = "0B5Isk4aTJApuZE9sVzg2MUxvc0U";
try {
URL url = new URL("https://drive.google.com/uc?export=download&id=" + id);
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.connect();
int lenghtOfFile = c.getContentLength();
InputStream input = new BufferedInputStream(url.openStream(), 8192);
String out = Environment.getExternalStorageDirectory().getAbsolutePath() + "/sifr/album";
File filedir = new File(out);
if (!filedir.exists()) {
filedir.mkdirs();
}
OutputStream output = new FileOutputStream(out + "/Poocha.mp3");
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress("" + (int) ((total * 100)/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
Log.i("GetPathLst errr", e + "");
}
return null;
}
は、誰かが問題を指摘してもらえますか?
何を説明しましたか? @Cheticamp –
それは本当のidではないのですか? @Cheticamp リンクを右クリックして新しいウィンドウで開き、ファイルがダウンロードされます。同じことが私のコードでは機能していません。 ドライブ共有可能リンクをダウンロード中に問題が発生します。コードが動作します。それは私の質問に焦点を当てています。 もっと詳しいことができればそれは素晴らしいことでしょう。 私はマニフェストの権限を追加しました。 –
@masoomnazirsanadi申し訳ありませんが、それは私が作った明確な声明ではありませんでした。私は私の答えで与えたIDが私のファイルの本当のIDではないことを意味しました。私はあなたの問題を見つけたと思います。私はすぐに私の答えに更新を掲載します。 – Cheticamp