动态申请权限之后还是报原来的错!为什么解决问题的评论多了就看不到评论了?

动态申请权限之后还是报原来的错!为什么解决问题的评论多了就看不到评论了?

 
com.studio.handlerproject;

android.Manifest;
android.app.Activity;
android.app.AlertDialog;

android.content.DialogInterface;
android.content.Intent;
android.content.pm.PackageManager;

android.net.Uri;
android.os.Bundle;
android.os.Environment;
android.os.Handler;
android.os.Message;
android.provider.Settings;
android.support.v4.app.ActivityCompat;
android.support.v4.content.ContextCompat;
android.view.View;
android.widget.ProgressBar;
android.widget.Toast;

java.io.File;
java.io.FileOutputStream;
java.io.IOException;
java.io.InputStream;
java.io.OutputStream;
java.net.MalformedURLException;
java.net.URL;
java.net.URLConnection;

DownloadActivity Activity {
    = ;
    Handler ;
    =;

    = ;
    onCreate(Bundle savedInstanceState) {
        .onCreate(savedInstanceState);
        setContentView(R.layout.);

        ProgressBar progressBar= (ProgressBar) findViewById(R.id.);

        findViewById(R.id.).setOnClickListener(View.OnClickListener() {
            onClick(View v) {
                Thread(Runnable() {
                    run() {
                        download();
                    }
                }).start();
            }
        });
        = Handler(){
            handleMessage(Message msg) {
                .handleMessage(msg);
                (msg.){
                    :
                        .setProgress((Integer) msg.);
                        number=(Integer) msg.;
                        (number==){
                            Toast.(DownloadActivity., , Toast.).show();
                        }
                        ;
                    :
                        Toast.(DownloadActivity., , Toast.).show();
                        ;
                }
            }
        };

    }

    download(String s) {
        {
            URL url=URL(s);
            {
                URLConnection urlConnection=url.openConnection();

                InputStream inputStream=urlConnection.getInputStream();

                contentLength=urlConnection.getContentLength();

                String downloadFolderName= Environment.()+ File.++File.;

                File file=File(downloadFolderName);
                (!file.exists()){
                    file.mkdirs();
                }

                String fileName=downloadFolderName+;
                File apkFile=File(fileName);
                (apkFile.exists()){
                    apkFile.delete();
                }
                downloadSize=;
                [] bytes=[];
                length;
                OutputStream outputStream=FileOutputStream(fileName);
                ((length=inputStream.read(bytes))!=-){
                    outputStream.write(bytes,,length);
                    downloadSize+=length;

                    Message message=Message.();
                    message.=downloadSize*/contentLength;

                    message.= ;
                    .sendMessage(message);

                }
                inputStream.close();
                outputStream.close();
            } (IOException e) {
                Message message=Message.();
                message.= ;
                .sendMessage(message);

                e.printStackTrace();
            }
        } (MalformedURLException e) {
            Message message=Message.();
            message.= ;
            .sendMessage(message);
            e.printStackTrace();
        }

    }


    click(View view) {
        isAllGranted = checkPermissionAllGranted(
                String[] {
                        Manifest.permission.,
                        Manifest.permission.,
                        Manifest.permission.}
        );
        (isAllGranted) {
            doBackup();
            ;
        }
        ActivityCompat.(
                ,
                String[] {
                        Manifest.permission.,
                        Manifest.permission.,
                        Manifest.permission.},
                );
    }

    checkPermissionAllGranted(String[] permissions){
        (String permission : permissions){
            (ContextCompat.(,permission)!=PackageManager.){
                ;
            }
        }
        ;
    }

    onRequestPermissionsResult(requestCode, String[] permissions, [] grantResults) {
        .onRequestPermissionsResult(requestCode, permissions, grantResults);
        (requestCode==){
            isAllGranted=;
            (grant : grantResults){
                (grant!=PackageManager.){
                    isAllGranted=;
                    ;
                }
            }
            (isAllGranted){
                doBackup();
            }{
                openAppDetails();
            }
        }
    }

    doBackup(){
        Toast.(DownloadActivity., , Toast.).show();
    }

    openAppDetails(){
        AlertDialog.Builder builder=AlertDialog.Builder();
        builder.setMessage();
        builder.setPositiveButton(, DialogInterface.OnClickListener() {
            onClick(DialogInterface dialog, which) {
                Intent intent=Intent();
                intent.setAction(Settings.);
                intent.addCategory(Intent.);
                intent.setData(Uri.(+getPackageName()));
                intent.addFlags(Intent.);
                intent.addFlags(Intent.);
                intent.addFlags(Intent.);
                startActivity(intent);
            }
        });
        builder.setNegativeButton(,);
        builder.show();
    }
}

正在回答

登陆购买课程后可参与讨论,去登陆

5回答

你把不行的代码贴出来,我运行后方便快速帮你找到原因

http://img1.sycdn.imooc.com//climg/5b7e7ed70001104507350174.jpg

  • 我一点一点的删代码,最后把Handler代码删了click才触发!请问这是为什么?
    2018-08-24 10:38:25
  • 我们慕课网有没有QQ群啊。方便一起讨论
    2018-08-24 10:41:52
  • 又遇到新问题了。当我走到检测到权限没开时,去手动开启权限程序时候闪退了.............................
    2018-08-24 10:51:24
irista23 2018-08-22 16:52:30

按你的想法设置的程序是可以执行点击的丫,你检查下Log.d(TAG, "download: "+"进入View");能否执行

http://img1.sycdn.imooc.com//climg/5b7d242c00012ddc05140347.jpg

http://img1.sycdn.imooc.com//climg/5b7d241400015e0005730402.jpg

  • 没有执行那句话......
    2018-08-22 16:58:33
  • irista23 回复 提问者 曾经的曾经去哪了 #2
    你对照下我的布局文件 查看一下 看是不是问题在布局文件
    2018-08-22 16:59:51
  • 提问者 曾经的曾经去哪了 回复 irista23 #3
    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button" android:id="@+id/button2" android:onClick="click" android:layout_gravity="center_horizontal" /> <ProgressBar style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/progressBar" android:progress="100" android:max="100" android:layout_gravity="center_horizontal" /> </LinearLayout>
    2018-08-22 17:01:02
提问者 曾经的曾经去哪了 2018-08-22 16:35:21

public void click(View view) {
   Log.d(TAG, "download: "+"进入View");
   boolean isAllGranted = checkPermissionAllGranted(
           new String[] {
                   Manifest.permission.READ_CONTACTS,
                   Manifest.permission.READ_EXTERNAL_STORAGE,
                   Manifest.permission.WRITE_EXTERNAL_STORAGE
           }
   );
   if (isAllGranted) {
       Log.d(TAG, "download: "+"判断isAllGranted");
       doBackup();
       return;
   }
   ActivityCompat.requestPermissions(
           this,
           new String[] {
                   Manifest.permission.READ_CONTACTS,
                   Manifest.permission.READ_EXTERNAL_STORAGE,
                   Manifest.permission.WRITE_EXTERNAL_STORAGE
           },
           MY_PERMISSION_REQUEST_CODE
   );
   Log.d(TAG, "download: "+"View结束");
}

private boolean checkPermissionAllGranted(String[] permissions){
   for(String permission : permissions){

       if(ContextCompat.checkSelfPermission(this,permission)!=PackageManager.PERMISSION_GRANTED){
           Log.d(TAG, "download: "+"检测到权限没开");
           return false;
       }
   }
   Log.d(TAG, "download: "+"检测到权限全开");
   return true;
}

private void doBackup(){
   Toast.makeText(DownloadActivity.this, "获得权限", Toast.LENGTH_SHORT).show();
}

提问者 曾经的曾经去哪了 2018-08-22 10:20:47

报错如下:

08-22 02:19:09.358 2457-2797/com.studio.handlerproject W/System.err: java.io.FileNotFoundException: /storage/emulated/0/imooc/imooc.apk (No such file or directory)

08-22 02:19:09.358 2457-2797/com.studio.handlerproject W/System.err:     at java.io.FileOutputStream.open(Native Method)

08-22 02:19:09.358 2457-2797/com.studio.handlerproject W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:221)

08-22 02:19:09.358 2457-2797/com.studio.handlerproject W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:108)

08-22 02:19:09.358 2457-2797/com.studio.handlerproject W/System.err:     at com.studio.handlerproject.DownloadActivity.download(DownloadActivity.java:106)

08-22 02:19:09.358 2457-2797/com.studio.handlerproject W/System.err:     at com.studio.handlerproject.DownloadActivity.access$000(DownloadActivity.java:35)

08-22 02:19:09.358 2457-2797/com.studio.handlerproject W/System.err:     at com.studio.handlerproject.DownloadActivity$1$1.run(DownloadActivity.java:54)

08-22 02:19:09.358 2457-2797/com.studio.handlerproject W/System.err:     at java.lang.Thread.run(Thread.java:761)

08-22 02:19:09.427 2457-2495/com.studio.handlerproject E/EGL_emulation: tid 2495: eglSurfaceAttrib(1227): error 0x3009 (EGL_BAD_MATCH)

08-22 02:19:09.428 2457-2495/com.studio.handlerproject W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x78d67e902100, error=EGL_BAD_MATCH

08-22 02:19:09.430 2457-2495/com.studio.handlerproject D/EGL_emulation: eglMakeCurrent: 0x78d67e864dc0: ver 2 0 (tinfo 0x78d67e869100)

08-22 02:19:09.464 2457-2495/com.studio.handlerproject D/EGL_emulation: eglMakeCurrent: 0x78d67e864dc0: ver 2 0 (tinfo 0x78d67e869100)


  • 关于找不到路径问题,先确定问题的原因,比如: 1)如果Environment.getExternalStorageState().equals(Envronment.MEDIA_MOUNTED)的返回值为false代表手机上没有正确插入sdCard或者没有读写sdCard的权限。 2)如果file.mkdir() 返回false,一般就是清单文件以及6.0动态权限没有申请。
    2018-08-22 10:57:00
  • 提问者 曾经的曾经去哪了 回复 irista23 #2
    我测试了一下: if(!file.exists()){ file.mkdirs(); } if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ Log.d(TAG, "download: "+"手机SD卡正常"); }else{ Log.d(TAG, "download: "+"没有正确插入sdCard或者没有读写sdCard的权限!"); } if(file.exists()){ Log.d(TAG, "download: "+"imooc创建完成!"); }else { Log.d(TAG, "download: "+"imooc创建失败!6.0动态权限没有申请!"); } 结果是: 08-22 03:24:22.553 5021-5537/com.studio.handlerproject D/测试:: download: 手机SD卡正常 08-22 03:24:22.553 5021-5537/com.studio.handlerproject D/测试:: download: imooc创建失败!6.0动态权限没有申请! 但是我是看着pdf写的,而且xml也申请权限了!
    2018-08-22 11:26:26
  • irista23 回复 提问者 曾经的曾经去哪了 #3
    跟踪一下权限代码,检查一下代码是否都被正确执行了,有没有报错或是异常退出
    2018-08-22 11:32:10
irista23 2018-08-22 10:07:22

报的是什么错?看不到评论是具体现象是什么,最好把截图发出来,方便我们查找原因。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android网络操作与数据存储2018版
  • 参与学习           人
  • 提交作业       307    份
  • 解答问题       1613    个

本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师