㈠ android華為手機申請許可權如圖,是如何實現的
手機管家,許可權管理,找到對應的APP,然後點開找到許可權點開就可以找到了
㈡ permission和uses-permission的區別
<permission>和 <uses-permission> 以及<application> 都是同級的(說不同級的都是被人誤導了),區別在於一個是自定義許可權,一個是使用許可權。從名稱uses就可以看出,uses是使用不是用戶。
比如一個應用A給其它應用提供一個provider,為了安全性,還為這個provider聲明了一個自己定義的許可權,因此要用到<permission> 。
如:<provider android:name=".provider.LeaderProvider"
android:authorities="com.jacp.provider.demo.leader"
android:permission="com.jacp.demo.bage.see1"
android:exported="true" />
<permission android:protectionLevel="normal" android:name="com.jacp.demo.bage.see1"></permission>
然後另外一個應用B想要 訪問A提供的provider,就需要
在 mianfest 如下申請使用訪問A的provider需要的許可權,如
<uses-permission android:name="com.jacp.demo.bage.see1"></uses-permission>
㈢ 我在android框架層中自定義了一個service,請教一下,該在哪個文件中添加相關許可權
也是在AndroidManifest中,service注冊後寫在 <service >標簽里
application頁面application Nodes中點擊你要更改的services,右邊的permission中改也行。
比如 android.intent.action.ACTION_DATE_CHANGE 即可允許修改系統日期
㈣ android 自定義launcher需要root許可權嗎
不需要的。
㈤ android中自定義廣播需要哪個許可權
接受者的清單文件:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.permissionbroadcastreceiver">
<permission android:name="com.example.broadcast.permission"
android:protectionLevel="normal" />
<application android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".PermissionRecevicer"
android:permission="com.example.broadcast.permission">
<intent-filter>
<action android:name="com.example.permissionbroadcastreceiver.message" />
</intent-filter>
</receiver>
</application></manifest>
在清單文件中聲明一個許可權,然後在receiver中要求發送者具有此許可權,這樣廣播接受者進程就算是准備完成了!!
廣播發送者的清單文件:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.permissionbroadcast">
<uses-permission android:name="com.example.broadcast.permission" />
<application android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application></manifest>
在清單文件請求剛才在接收者清單文件聲明的許可權即可,這里的運行結果就不展示了,只是log而已!!!
㈥ android 廣播自定義廣播接收問題
其實沒啥技術可言的,就是Android中可以自定義許可權的,對於四大組件的訪問加上一層保護,不多說了,直接上代碼:
發送廣播:
[java] view plain
package com.tt.test;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((Button)findViewById(R.id.button)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent("COM.MESSAGE");
i.addCategory("receiver");
i.putExtra("message", "haha");
sendOrderedBroadcast(i, "xvtian.gai.receiver");
}
});
}
}
AndroidManifest.xml:
[html] view plain
<uses-permission android:name="xvtian.gai.receiver" ></uses-permission>
<permission android:protectionLevel="normal" android:name="xvtian.gai.receiver"></permission>
接收廣播:
[java] view plain
package com.tt.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("TAG", "receiver intent:" + intent.toString());
}
}
AndroidManifest.xml
[html] view plain
<uses-permission android:name="xvtian.gai.receiver" ></uses-permission>
[html] view plain
<receiver android:name=".Receiver" android:permission="xvtian.gai.receivers">
<intent-filter>
<action android:name="COM.MESSAGE" />
<category android:name="receiver" />
</intent-filter>
</receiver>
㈦ android如何讓系統庫成為全局
一、通過Settings.System進行讀寫
//其中"getXXX"代表對應的類似方法,如getInt()、getBoolean、putString()等。
//通過變數名稱獲取值,如果變數不存在,資料庫中沒有設置過初始值或者該值類型不對,將拋出SettingNotFoundException異常
Settings.System.getXXX(ContentResolver cr, String name);
//通過變數名稱獲取值,如果發生上面方法中導致異常的情況,將返給定的默認值
Settings.System.getXXX(ContentResolver cr, String name, XXX def);
//將指定名稱的值寫入資料庫
Settings.System.putXXX(ContentResolver cr,String name, XXX Value);
非系統許可權,需要在App項目的AndroidMainfes.xml文件中添加如下許可權:
<uses-permission android:name="android.permission.READ_SETTINGS" /><uses-permission android:name="android.permission.WRITE_SETTINGS" />
二、在Settings.System添加一個自定義的全局變數
Settings.java文件位於frameworks\base\core\java\android\provider下,打開該文件,搜索關鍵詞 SETTINGS_TO_BACKUP ,共有兩處,一處是在Settings裡面,另一處在內部類Settings.System裡面,在SETTINGS_TO_BACKUP數組上面添加自定義變數,同時在該數組裡面添加自定義變數名稱,Settting和內部類System都需要添加(共四個地方),比如自定義系統變數SYSTEM_ZWH:
public static final String SYSTEM_ZWH = "system_zwh"; Public static final String[] SETTINGS_TO_BACKUP = { ... SYSTEM_ZWH, ... }
在代碼中我們就可以通過對於的get和put方法對該值進行讀取和寫入操作了。
㈧ android怎麼動態獲取自定義屬性
運行時許可權處理
Android6.0系統默認為targetSdkVersion小於23的應用默認授予了所申請的所有許可權,所以如果你以前的APP設置的targetSdkVersion低於23,在運行時也不會崩潰,但這也只是一個臨時的救急策略,用戶還是可以在設置中取消授予的許可權。
聲明目標SDK版本
我們需要在build.gradle中聲明targetSdkVersion為23
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.yourcomany.app
minSdkVersion 18
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
檢查並申請許可權
我們需要在用到許可權的地方,每次都檢查是否APP已經擁有許可權,比如我們有一個下載功能,需要寫SD卡的許可權,我們在寫入之前檢查是否有WRITE_EXTERNAL_STORAGE許可權,沒有則申請許可權
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//申請WRITE_EXTERNAL_STORAGE許可權
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
}
請求許可權後,系統會彈出請求許可權的Dialog
用戶選擇允許或需要後,會回調onRequestPermissionsResult方法, 該方法類似於onActivityResult
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
doNext(requestCode,grantResults);
}
我們接著需要根據requestCode和grantResults(授權結果)做相應的後續處理
private void doNext(int requestCode, int[] grantResults) {
if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
} else {
// Permission Denied
}
}
}
Fragment中運行時許可權的特殊處理
在Fragment中申請許可權,不要使用ActivityCompat.requestPermissions, 直接使用Fragment的requestPermissions方法,否則會回調到Activity的 onRequestPermissionsResult
如果在Fragment中嵌套Fragment,在子Fragment中使用requestPermissions方 法,onRequestPermissionsResult不會回調回來,建議使用 getParentFragment().requestPermissions方法,這個方法會回調到父Fragment中的onRequestPermissionsResult,加入以下代碼可以把回調透傳到子Fragment
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
List<Fragment> fragments = getChildFragmentManager().getFragments();
if (fragments != null) {
for (Fragment fragment : fragments) {
if (fragment != null) {
fragment.onRequestPermissionsResult(requestCode,permissions,grantResults);
}
}
}
}
相關開源項目
PermissionsDispatcher
使用標注的方式,動態生成類處理運行時許可權,目前還不支持嵌套Fragment。
RxPermissions
基於RxJava的運行時許可權檢測框架
Grant
簡化運行時許可權的處理,比較靈活
android-RuntimePermissions
Google官方的例子
附錄
以下許可權只需要在AndroidManifest.xml中聲明即可使用
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_NOTIFICATION_POLICY
android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_WIMAX_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.CHANGE_WIMAX_STATE
android.permission.DISABLE_KEYGUARD
android.permission.EXPAND_STATUS_BAR
android.permission.FLASHLIGHT
android.permission.GET_ACCOUNTS
android.permission.GET_PACKAGE_SIZE
android.permission.INTERNET
android.permission.KILL_BACKGROUND_PROCESSES
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.NFC
android.permission.READ_SYNC_SETTINGS
android.permission.READ_SYNC_STATS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REORDER_TASKS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SET_TIME_ZONE
android.permission.SET_WALLPAPER
android.permission.SET_WALLPAPER_HINTS
android.permission.SUBSCRIBED_FEEDS_READ
android.permission.TRANSMIT_IR
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_SYNC_SETTINGS
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
com.android.launcher.permission.UNINSTALL_SHORTCUT
㈨ android ble 自定義characteristic怎麼解析
本文將介紹BLE設備之間的數據傳輸,首先是數據的發送。數據的發送通過Characteristic完成,發送數據的Characteristic必須擁有寫許可權,即BluetoothGattCharacteristic類中的mProperties屬性必須為以下兩者中之一:
[java] view plain
/**
* 寫許可權:不需要響應
*/
public static final int PROPERTY_WRITE_NO_RESPONSE = 0x04;
/**
* 寫許可權:需要響應
*/
public static final int PROPERTY_WRITE = 0x08;
在BLE的連接過程中,連接成功後會返回一個BluetoothGatt類型變數(見上一篇文章的2.7步驟),該類封裝了BLE主要的操作。發送數據所需的Characteristic在BLE設備連接成功後的獲取Service的過程中獲得(見上一篇文章的2.10步驟),因此BLE的數據發送可以如下所示:
[java] view plain
@Override
public boolean writeCharacteristic(ICharacteristicBle chrBle) {
return mBleGatt.writeCharacteristic((BluetoothGattCharacteristic)chrBle);
㈩ android 自定義的launcher在6.0後需要動態申請許可權
6.0許可權的基本知識,以下是需要單獨申請的許可權,共分為9組,每組只要有一個許可權申請成功了,就默認整組許可權都可以使用了。
group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTS
permission:android.permission.GET_ACCOUNTS
permission:android.permission.READ_CONTACTS group:android.permission-group.PHONE
permission:android.permission.READ_CALL_LOG
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.USE_SIP
permission:android.permission.PROCESS_OUTGOING_CALLS
permission:com.android.voicemail.permission.ADD_VOICEMAIL group:android.permission-group.CALENDAR
permission:android.permission.READ_CALENDAR
permission:android.permission.WRITE_CALENDAR group:android.permission-group.CAMERA
permission:android.permission.CAMERA group:android.permission-group.SENSORS
permission:android.permission.BODY_SENSORS group:android.permission-group.LOCATION
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION group:android.permission-group.STORAGE
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE group:android.permission-group.MICROPHONE
permission:android.permission.RECORD_AUDIO group:android.permission-group.SMS
permission:android.permission.READ_SMS
permission:android.permission.RECEIVE_WAP_PUSH
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS
permission:android.permission.SEND_SMS
permission:android.permission.READ_CELL_BROADCASTS
以下是普通許可權,只需要在AndroidManifest.xml中申請即可。
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS