我有一个使用外部存储来存储照片的应用程序.根据需要,在其清单中,请求以下权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
它使用以下内容来检索所需的目录
File sdDir = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd", Locale.US);
String date = dateFormat.format(new Date());
storageDir = new File(sdDir, getResources().getString(
R.string.storagedir)
+ "-" + date);
// Create directory, error handling
if (!storageDir.exists() && !storageDir.mkdirs()) {
... fails here
Run Code Online (Sandbox Code Playgroud)
该应用程序适用于Android 5.1至2.3; 它已在Google Play上播放了一年多.
在将我的一个测试手机(Android One)升级到6之后,它现在在尝试创建必需目录时返回错误,"/ sdcard/Pictures/myapp-yy-mm".
SD卡配置为"便携式存储".我已经格式化了SD卡.我已经取代了它.我重新启动了.一切都无济于事.
此外,内置的Android屏幕截图功能(通过电源+低音量)失败"由于存储空间有限,或者应用程序或您的组织不允许".
有任何想法吗?
我注意到我的新手机上的Android应用程序存在一个奇怪的问题.SDK 23权限弹出窗口(如外部存储)将被下面附加的警报阻止.我最初认为这与我的手机有关,但它似乎并没有影响我的任何其他安装的应用程序.
这个问题可能与安装调试版本有关,还是我的权限处理有问题?我认为它可能与我正在使用的其中一个广告平台有关但我尝试禁用它们仍然出现了
我已经粘贴了下面生成此权限请求的图像保存功能.我正在使用Dexter来编写一大堆可怕的样板文件
public static void saveToExternalStorageIfAllowed(final Context context, final Bitmap bitmapImage, final String title) {
final Tracker t = ((LoLHistory) context.getApplicationContext()).getTracker(LoLHistory.TrackerName.APP_TRACKER);
// saving to publicly visible/accessible folder. Requires write permission
int permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
// do not have permissions to write, request
t.send(new HitBuilders.EventBuilder()
.setCategory("FILE")
.setAction("PermissionMissing")
.setLabel("WRITE_EXTERNAL")
.build());
Dexter.checkPermission(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse response) {
t.send(new HitBuilders.EventBuilder()
.setCategory("FILE")
.setAction("PermissionGranted")
.setLabel("WRITE_EXTERNAL")
.build());
saveToExternalStorage(context, bitmapImage, title);
}
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我想在收到推送通知时自动打开应用程序。我已经尝试过,但它仍然无法按我的预期工作。下面的代码在应用程序处于活动状态或处于 MainActivity 中时有效,但当应用程序在后台或仅在托盘上显示通知时则不起作用。我错过了什么?
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getNotification() != null) {
if (PreferencesUtil.getInstance(this).isLoggedIn()) {
sendNotification(remoteMessage.getData().get("order_id"));
}
}
}
public void sendNotification(String messageBody) {
NotificationManager notificationManager = null;
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder notificationBuilder;
notificationBuilder = new NotificationCompat.Builder(this)
.setContentTitle("Notification")
.setSmallIcon(R.mipmap.icon_notif)
.setContentText(messageBody)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setDefaults(Notification.DEFAULT_LIGHTS );
//add sound
try {
Uri sound = Uri.parse("android.resource://" + this.getPackageName() + "/" + R.raw.siren);
Ringtone ringtone = RingtoneManager.getRingtone(this, sound);
ringtone.play();
notificationBuilder.setSound(sound);
} catch (Exception e) {
e.printStackTrace();
} …Run Code Online (Sandbox Code Playgroud) 这是有关绘图覆盖权限问题的众所周知的问答。我在以前的应用程序中也观察到了相同的行为,即,从Play商店安装该应用程序时会自动授予该行为。
但是,在我最近的应用程序中,我发现即使从Play商店安装了该权限,也未授予该权限。起初,我认为这可能是我们测试设备的一个特定问题。但是,我想通过我最喜欢的分析工具跟踪这种缺乏权限的情况的数量来确定这一点。
我们昨天发布了通知此事件的版本,分析表明,我们必须在1天之内手动请求80位用户的许可。哎哟!!!
分析表明,此问题在从6.0到9的几乎所有Android版本中均会发生。因此,仅少数版本并非如此。
最近对此许可有任何更改吗?或者,Play Store是否有某种白名单(例如Facebook自动将其授予)以授予此权限?
目前我正在使用下面的代码来请求覆盖权限
if (!isSystemAlertPermissionGranted(context)) {
/* if not construct intent to request permission */
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + BuildConfig.APPLICATION_ID));
/* request permission via start activity for result */
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
return false;
}
Run Code Online (Sandbox Code Playgroud)
但是我看到像 Facebook Messenger 这样的应用程序可以在不要求覆盖许可的情况下绘制其他应用程序。现在我很好奇他们如何做到这一点。任何线索对我都有帮助!!!
当用户第一次打开应用程序时,我需要自动获得以下权限的用户权限
电话工作正常。如何获得始终处于最佳状态的权限
主要活动
protected void onCreate(Bundle savedInstanceState) {
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SYSTEM_ALERT_WINDOW)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.SYSTEM_ALERT_WINDOW}, 1);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
Run Code Online (Sandbox Code Playgroud)
显现
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Run Code Online (Sandbox Code Playgroud) 如何Settings -> Apps -> Draw over other apps在Android 中以编程方式授予权限?我想使用系统警报窗口,但无法在Android Marshmallow中强制用户通过"设置"应用并首先授予权限.