2017-07-03 7 views
0

をトリガーない私は、ダウンロードマネージャを追加したが、それは、すべてのボディのヘルプをダウンロードすることができ、イベントをトリガされていません。ユーザーがwebviewのダウンロードオプションに行き、リンクをクリックしてファイルをダウンロードしても何も起こりません。私はstackoverflowの投稿の多くを通過しているが、何も私のために働く。AndroidのWebViewのは、hrefのダウンロードファイル

public class MainActivity extends AppCompatActivity { 

    private WebView mWebView; 

    // boolean thread_running = true; 
    private static final String TAG = "MainActivity"; 
    // flag for Internet connection status 
    Boolean isInternetPresent = false; 

    // Connection detector class 
    ConnectionDetector cd; 


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


     mWebView = (WebView) findViewById(R.id.webView); 
     mWebView.setWebViewClient(new MyAppWebViewClient(this)); 

     WebSettings webSettings = mWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setSupportZoom(false); 
     webSettings.setDomStorageEnabled(true); 


     // creating connection detector class instance 
     cd = new ConnectionDetector(getApplicationContext()); 
     /** 
     * Check Internet status button click event 
     * */ 
     isInternetPresent = cd.isConnectingToInternet(); 
     // check for Internet status 
     if (isInternetPresent) { 
      // Internet Connection is Present 
      // make HTTP requests 
      mWebView.loadUrl("http://url"); 
     } else { 
      // Internet connection is not present 
      // Ask user to connect to Internet 
      //showAlertDialog(MainActivity.this, "No Internet Connection", 
      //"You don't have internet connection.", false); 
      Toast.makeText(this, "No Internet connection, Please SwitchOn Connection", Toast.LENGTH_LONG).show(); 
      finish(); 
     } 

    } 

    @Override 
    public void onBackPressed() { 
     if (mWebView.canGoBack()) { 
      mWebView.goBack(); 
     } else { 
      super.onBackPressed(); 
     } 
    } 


    public class MyAppWebViewClient extends WebViewClient { 

     private Context context; 

     public MyAppWebViewClient(Context context) { 
      this.context = context; 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 

      if (!cd.isConnectingToInternet()) { 

       //internet is not present 
       Toast.makeText(getApplicationContext(), "Internet Stopped Working", Toast.LENGTH_SHORT).show(); 
       finish(); 
      } 

      if(url.contains(".JPG")){ 

       DownloadManager mdDownloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); 
       DownloadManager.Request request = new DownloadManager.Request(
         Uri.parse(url)); 
       File destinationFile = new File(Environment.getExternalStorageDirectory(),getFileName(url)); 
       request.setDescription("Downloading ..."); 
       request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
       request.setDestinationUri(Uri.fromFile(destinationFile)); 
       mdDownloadManager.enqueue(request); 


       return true; 

      } 

      view.loadUrl(url); 
      return true; 
     } 

     public String getFileName(String url) { 
      String filenameWithoutExtension = ""; 
      filenameWithoutExtension = String.valueOf(System.currentTimeMillis() 
        + ".jpg"); 
      return filenameWithoutExtension; 
     } 

    } 
    } 

誰かが私を助けてくれますか?リンク

Writing exception to parcel 
                   java.lang.SecurityException: No permission to write to /storage/emulated/0/1499148267411.jpg: Neither user 10109 nor current process has android.permission.WRITE_EXTERNAL_STORAGE. 
                    at android.app.ContextImpl.enforce(ContextImpl.java:1438) 
                    at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:1470) 
                    at com.android.providers.downloads.DownloadProvider.checkFileUriDestination(DownloadProvider.java:724) 
                    at com.android.providers.downloads.DownloadProvider.insert(DownloadProvider.java:558) 
                    at android.content.ContentProvider$Transport.insert(ContentProvider.java:263) 
                    at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:163) 
                    at android.os.Binder.execTransact(Binder.java:453) 

答えて

1

最後に、lotを検索してhereでMarshmallow API 23> =の許可について読んだら、実行時に許可する必要があります。私は、このコードで私の問題を解決しMainActivity

int permissionCheck = ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE); 
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 
     //requesting permission 
     ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
    } else { 
     Log.i(TAG , "Permission Granted"); 
    } 

この方法

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if(grantResults[0]== PackageManager.PERMISSION_GRANTED){ 
     //you have the permission now. 
      Log.i(TAG , "Permission Already Granted"); 
    } 


} 
-1

上のクリックはあなたがラインを表示することができますとき

...問題なししかし、HTMLページ内の画像ファイルへのリンクが動作していないページが読み込ま私はこの次のエラーを取得していますHTML(あなたがダウンロードした場所からのリンク) のような:

<a href='something'></a> 

またはあなたがそれをトリガーするJSを使用していますか?

ので、あなたがしたい場合は、これを使用することができます:

ファイルのダウンロード(代わりに ファイルにナビゲートする)リンクをクリック:

<a href="/images/myw3schoolsimage.jpg" download>

see this link for more info

UPDATE

は、あなたのAndroidManifest.xmlに以下を追加

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

EDIT

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="********"> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

のオーバーライドで

のonCreateメソッドはい、私は同様のリンク<のhref = "/画像/ myw3schoolsimage.jpgを書かれています"ダウンロードは> –

+0

私は、このエラーjava.lang.SecurityException取得しています:/storage/emulated/0/1499148267411.jpgに書き込むための権限がありません:ユーザー10109も現在のプロセスのいずれもがandroid.permission.WRITE_EXTERNAL_STORAGEがあります。 android.app.ContextImpl.enforceCallingOrSelfPermissionでandroid.app.ContextImpl.enforce(ContextImpl.java:1438) (ContextImplで 。java:1470) –

+0

編集箇所を参照してください。 – Steven

-1

あなたmainfestファイルに次の2行を追加します

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

すでにこの2行をマニフェストに追加しましたが、同じエラーが表示される –

+0

OSバージョンは同じですか?もしそれがAPIレベル23以上であれば、アンドロイドランタイム許可モデル –

+0

を実装する必要があります。API 23を使用して、アンドロイドランタイムアクセス許可を実装する方法 –

関連する問題