내 응용 프로그램에서 Facebook을 사용하기 위해 webview를 사용하고 있습니다. 페이스 북 페이지에서는 이미지가있는 많은 게시물을 찾을 수 있습니다. Facebook에서 이미지를 다운로드하려면 webview 용 longpress 메서드와 HitTestResult 메서드를 사용하고 있습니다. 내 긴 보도 자료가 작동하고 HitTestResult는 내가 longpressed있는 데이터를 가지고 있습니다. URL (https 링크가있는 텍스트)이 제대로 표시됩니다.Facebook에서 WebviewHitResults를 사용하여 webview에서 이미지 URL을 가져올 수 없습니다.
내 문제는 내가 페이스 북 이미지 포스트 (간단히 이미지)에서 이미지를 얻지 못하고 대신 URL 링크 (like-https://something
)를 얻고 있다는 것입니다. 이미지에 액세스하여 다운로드하는 방법. 내 활동에
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
:
권한은 내가 매니페스트에 추가
WebSettings settings = ((WebView) findViewById(R.id.webview)).getSettings();
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccess(true);
settings.setAppCacheEnabled(true);
settings.setLoadWithOverviewMode(true);
webView2.setWebViewClient(new PQClient());
webView2.setWebChromeClient(new PQChromeClient());
하고 여기에
@Override
protected void onResume() {
super.onResume();
final WebView wv = (WebView) findViewById(R.id.webview);
wv.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
WebView.HitTestResult hitResult = null;
hitResult = wv.getHitTestResult();
if (hitResult.getType() == WebView.HitTestResult.IMAGE_TYPE ||
hitResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
try {
String imageUrl = hitResult.getExtra();
Toast.makeText(SocialMediaActivity.this,imageUrl,Toast.LENGTH_LONG).show();
URL url = new URL(imageUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard, "filename.ext");
FileOutputStream fileOutput = new FileOutputStream(file);
InputStream inputStream = urlConnection.getInputStream();
byte[] buffer = new byte[1024];
int bufferLength = 0;
while ((bufferLength = inputStream.read(buffer)) > 0) {
fileOutput.write(buffer, 0, bufferLength);
}
fileOutput.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
});
}
, 내가 생각하는 문제는있는 상태의 경우 어디에서 어느 때문에 longpress를 수행, 그것은 이미지를 반환하지 않지만 URL 링크를 제공합니다. 만약 내가 이미지를 얻을 수있는 로컬 SD 카드에 다운로드 할 수 있습니다.
if (hitResult.getType() == WebView.HitTestResult.IMAGE_TYPE ||
hitResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE)
이미지를 얻으려면 Bitmap 코드를 사용해 보았습니다.
@Override
protected void onResume() {
super.onResume();
final WebView wv = (WebView) findViewById(R.id.webview);
wv.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
WebView.HitTestResult hitResult = null;
hitResult = wv.getHitTestResult();
try {
String imageUrl = hitResult.getExtra();
URL url = new URL(imageUrl);
Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
Toast.makeText(SocialMediaActivity.this,imageUrl,Toast.LENGTH_LONG).show();
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
//you can create a new file name "test.jpg" in sdcard folder.
File f = new File(Environment.getExternalStorageDirectory()
+ File.separator + "test.jpg");
f.createNewFile();
//write the bytes in file
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
// remember close de FileOutput
fo.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
});
}
이 코드를 사용하면 응용 프로그램이 충돌합니다.
링크를 사용하여 비트 맵으로 변환 한 다음 SD 카드에 저장해야합니다. http://stackoverflow.com/a/11831325/3111083 –
실제로 if() 조건을 확인하지 않습니다. IMAGE_TYPE 및 SRC_IMAGE_ANCHOR_TYPE을 의미합니다. 그래서 내가 오랫동안 이미지를 누르면 아무 일도 일어나지 않습니다. –
디버그 모드에서 응용 프로그램을 테스트 했으므로 if() 조건을 실행하지 않는다는 것을 알게되었습니다. 하지만 히트 결과 URL 링크가 있습니다. –