Skip to content

Commit f871e39

Browse files
committedJan 12, 2016
add request storage permission example
1 parent 537abb3 commit f871e39

File tree

5 files changed

+116
-4
lines changed

5 files changed

+116
-4
lines changed
 

‎PermissionExample/app/build.gradle

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@ android {
2020
}
2121

2222
dependencies {
23-
compile fileTree(dir: 'libs', include: ['*.jar'])
23+
compile fileTree(include: ['*.jar'], dir: 'libs')
2424
testCompile 'junit:junit:4.12'
2525
compile 'com.android.support:appcompat-v7:23.1.1'
2626
compile 'com.android.support:design:23.1.1'
27+
compile 'org.apache.commons:commons-io:1.3.2'
2728
}

‎PermissionExample/app/src/main/AndroidManifest.xml

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2525
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2626

27+
<!-- 只在23以上版本并请求了授权后有效 -->
2728
<uses-permission-sdk-23 android:name="android.permission.CALL_PHONE"/>
2829

2930
</manifest>

‎PermissionExample/app/src/main/java/com/halzhang/android/examples/permissionexample/MainActivity.java

+70-1
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,33 @@
11
package com.halzhang.android.examples.permissionexample;
22

3+
import android.Manifest;
4+
import android.content.pm.PackageManager;
35
import android.os.Bundle;
6+
import android.os.Environment;
47
import android.support.design.widget.FloatingActionButton;
58
import android.support.design.widget.Snackbar;
9+
import android.support.v4.app.ActivityCompat;
610
import android.support.v7.app.AppCompatActivity;
711
import android.support.v7.widget.Toolbar;
8-
import android.view.View;
12+
import android.util.Log;
913
import android.view.Menu;
1014
import android.view.MenuItem;
15+
import android.view.View;
16+
import android.widget.Button;
17+
18+
import org.apache.commons.io.FileUtils;
19+
20+
import java.io.File;
1121

1222
public class MainActivity extends AppCompatActivity {
1323

24+
private static final int REQUEST_STORAGE = 1;
25+
private static final String[] STORAGE_PERMISSION = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
26+
27+
28+
private Button mStorageBtn;
29+
private Button mPhoneBtn;
30+
1431
@Override
1532
protected void onCreate(Bundle savedInstanceState) {
1633
super.onCreate(savedInstanceState);
@@ -26,6 +43,58 @@ public void onClick(View view) {
2643
.setAction("Action", null).show();
2744
}
2845
});
46+
mStorageBtn = (Button) findViewById(R.id.btn_storage);
47+
mStorageBtn.setOnClickListener(new View.OnClickListener() {
48+
@Override
49+
public void onClick(View v) {
50+
writeFile();
51+
}
52+
});
53+
mPhoneBtn = (Button) findViewById(R.id.btn_phone);
54+
55+
}
56+
57+
private void writeFile() {
58+
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
59+
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
60+
//未授权,请求权限
61+
requestStoragePermission();
62+
} else {
63+
File file = new File(Environment.getExternalStorageDirectory(), "temp.txt");
64+
try {
65+
FileUtils.writeStringToFile(file, "Hello Runtime Permission");
66+
Log.i("PermissionExample", "Write file success!");
67+
} catch (Exception e) {
68+
e.printStackTrace();
69+
}
70+
}
71+
}
72+
73+
private void requestStoragePermission() {
74+
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
75+
|| ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
76+
Snackbar.make(mStorageBtn, "请求存储权限", Snackbar.LENGTH_LONG).setAction(android.R.string.ok, new View.OnClickListener() {
77+
@Override
78+
public void onClick(View v) {
79+
ActivityCompat.requestPermissions(MainActivity.this, STORAGE_PERMISSION, REQUEST_STORAGE);
80+
}
81+
}).show();
82+
} else {
83+
ActivityCompat.requestPermissions(this, STORAGE_PERMISSION, REQUEST_STORAGE);
84+
}
85+
}
86+
87+
@Override
88+
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
89+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
90+
if (requestCode == REQUEST_STORAGE) {
91+
if (Utils.verifyPermission(grantResults)) {
92+
Snackbar.make(mStorageBtn, "授权成功", Snackbar.LENGTH_LONG).show();
93+
writeFile();
94+
} else {
95+
Snackbar.make(mStorageBtn, "授权失败", Snackbar.LENGTH_LONG).show();
96+
}
97+
}
2998
}
3099

31100
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.halzhang.android.examples.permissionexample;
2+
3+
import android.content.pm.PackageManager;
4+
5+
/**
6+
* Created by HalZhang on 2016/1/12.
7+
*/
8+
public class Utils {
9+
10+
/**
11+
* 多权限授权结果校验
12+
*
13+
* @param grantResults
14+
* @return
15+
*/
16+
public static boolean verifyPermission(int[] grantResults) {
17+
if (grantResults.length < 1) {
18+
return false;
19+
}
20+
for (int result : grantResults) {
21+
if (result != PackageManager.PERMISSION_GRANTED) {
22+
return false;
23+
}
24+
}
25+
return true;
26+
}
27+
28+
}

‎PermissionExample/app/src/main/res/layout/content_main.xml

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<RelativeLayout
2+
<LinearLayout
33
xmlns:android="http://schemas.android.com/apk/res/android"
44
xmlns:app="http://schemas.android.com/apk/res-auto"
55
xmlns:tools="http://schemas.android.com/tools"
66
android:layout_width="match_parent"
77
android:layout_height="match_parent"
8+
android:orientation="vertical"
89
android:paddingBottom="@dimen/activity_vertical_margin"
910
android:paddingLeft="@dimen/activity_horizontal_margin"
1011
android:paddingRight="@dimen/activity_horizontal_margin"
@@ -17,4 +18,16 @@
1718
android:layout_width="wrap_content"
1819
android:layout_height="wrap_content"
1920
android:text="Hello World!"/>
20-
</RelativeLayout>
21+
22+
<Button
23+
android:id="@+id/btn_storage"
24+
android:layout_width="wrap_content"
25+
android:layout_height="wrap_content"
26+
android:text="storage"/>
27+
28+
<Button
29+
android:id="@+id/btn_phone"
30+
android:layout_width="wrap_content"
31+
android:layout_height="wrap_content"
32+
android:text="phone"/>
33+
</LinearLayout>

0 commit comments

Comments
 (0)
Please sign in to comment.