我有一个带有通知的应用程序,如果我点击它们就会打开某个活动.我想要的是,如果我点击通知并且活动已经打开,它就不会再次启动,而是会被带到前面.
我以为我可以用国旗做FLAG_ACTIVITY_BROUGHT_TO_FRONT或FLAG_ACTIVITY_REORDER_TO_FRONT,但它一直再次打开它,所以我有两次活动.
这是我的代码:
event_notification = new Notification(R.drawable.icon,
mContext.getString(R.string.event_notif_message), System.currentTimeMillis());
Intent notificationIntent = new Intent(mContext, EventListActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
sendNotification(event_notification, notificationIntent, mContext.getString(R.string.event_notif_title),
body, Utils.PA_NOTIFICATIONS_ID);
Run Code Online (Sandbox Code Playgroud)
我可以使用标志管理它,还是应该在SharedPreferences中存储变量以检查它是否已打开?
谢谢!
我正在开发一个Android应用程序,我希望它与headset按钮点击进行交互.我正在使用Android KitKat 4.4在Nexus 5中测试它.
我首先尝试使用简单的耳机(不是无线耳机).收到的按钮事件是KEYCODE_HEADSETHOOK(79).我创建了一个MEDIA_BUTTON receiver来处理它的点击:
<receiver android:name="com.example.mytest.SearchActivity$MediaButtonIntentReceiver">
<intent-filter>
<intent-filter android:priority="1000000000">
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
这是持有接收者的活动:
public class SearchActivity extends Activity {
private AudioManager mAudioManager;
private ComponentName mAudioReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
mAudioReceiver = new ComponentName(getPackageName(),
MediaButtonIntentReceiver.class.getName());
}
@Override
protected void onResume() {
super.onResume();
mAudioManager.registerMediaButtonEventReceiver(mAudioReceiver);
}
@Override
protected void onPause() {
super.onPause();
mAudioManager.unregisterMediaButtonEventReceiver(mAudioReceiver);
}
public static class MediaButtonIntentReceiver …Run Code Online (Sandbox Code Playgroud) 我有一个带有AlertDialog的应用程序,它显示了一个EditText.我按照Android开发人员指南来做,但我找不到如何获取用户输入的数据.
自定义布局只有一个EditText:
<EditText
android:id="@+id/license_value"
android:inputType="text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/license" />
Run Code Online (Sandbox Code Playgroud)
我正在使用DialogFragment来创建对话框.要在用户单击"确定"按钮时获取数据,我正在使用界面.
public class EditLicenseDialogFragment extends DialogFragment {
public interface EditLicenseDialogListener {
public void onDialogPositiveClick(DialogFragment dialog, String value);
}
private EditLicenseDialogListener mListener;
// Override the Fragment.onAttach() method to instantiate the NoticeDialogListener
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// Verify that the host activity implements the callback interface
try {
// Instantiate the NoticeDialogListener so we can send events to the host
mListener = (EditLicenseDialogListener) activity;
} catch (ClassCastException e) {
// …Run Code Online (Sandbox Code Playgroud) 我正在尝试AlertDialog使用自定义view(没有标题或页脚)和圆角构建.我已经看过很多关于如何做到这一点的帖子,我尝试了很多东西,但我不能像我想的那样构建它.
这是我的目标:

我drawable为被dialog调用的dialog_background.xml 创建了一个:
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid
android:color="#FFAAAAAA" />
<stroke
android:width="2dp"
android:color="#FF000000" />
<corners android:radius="20dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
我添加了一个style使用它:
<style name="MyDialog" parent="@android:style/Theme.Dialog">
<item name="android:background">@drawable/dialog_background</item>
</style>
Run Code Online (Sandbox Code Playgroud)
在layout我的自定义的view是要去有两个按钮.现在我告诉你一个空的LinearLayout简单.这是playdialog.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
style="@style/MyDialog"
>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
为了构建Dialog我使用a DialogFragment.这是它的onCreateDialog功能:
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.playdialog, null));
return builder.create();
}
Run Code Online (Sandbox Code Playgroud)
好吧,如果我使用这样的代码我得到这个:

我试图将dialog …
我有一个自定义布局的AlertDialog(只是一个EditText),我想在单击确定按钮时验证数据.如果验证失败,我不想关闭对话框.
我正在使用对话框的默认按钮(正面和负面).如果我使用"setPositiveButton("",new DialogInterface.OnClickListener()..."对话框总是关闭的.我看过几个帖子,他们说onClick Listener应该被覆盖,但我不能让它工作这是我发现的代码:
Button theButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
theButton.setOnClickListener(new CustomListener(dialog));
Run Code Online (Sandbox Code Playgroud)
因为它说它应该在显示对话框之后完成,所以我把这个代码放在我的活动中,而不是在我的DialogFragment中,但是如果我使用mDialogFragment.getDialog()它总是返回null.
这是我的Dialog片段的一部分:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.new);
LayoutInflater inflater = getActivity().getLayoutInflater();
dialogView = inflater.inflate(R.layout.edit_license, null);
builder.setView(dialogView)
// Add action buttons
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
MyDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
Run Code Online (Sandbox Code Playgroud)
在我的活动中,我执行以下操作:
DialogFragment dialog …Run Code Online (Sandbox Code Playgroud) 我们有一个大的Ionic,我们正在尝试应用build在production模式,因为它几乎准备好了.我们发现的第一个问题是JavaScript编译时我们遇到了" 堆内存不足"的错误,但我们通过给节点提供更多内存来修复它:
"ionic:build": "node --max-old-space-size=16384 ./node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js build",
npm run ionic:build -- --prod
Run Code Online (Sandbox Code Playgroud)
使用此命令,应用程序成功构建,但如果我打开它,我会收到以下错误:
Uncaught Error: Cannot find module “.”
at vendor.js:1
at vendor.js:1
at Object. (vendor.js:1)
at e (vendor.js:1)
at Object. (main.js:1)
at e (vendor.js:1)
at window.webpackJsonp (vendor.js:1)
at main.js:1
Run Code Online (Sandbox Code Playgroud)
我搜索了一下,发现它可能是由它造成的require,但我们没有使用它.知道可能发生的事情或我们可以做些什么来调试问题?有没有办法在不缩小JS的情况下使用"--prod"?
这是我的环境:
cli packages: (/usr/local/lib/node_modules)
@ionic/cli-utils : 1.19.2
ionic (Ionic CLI) : 3.20.0
global packages:
cordova (Cordova CLI) : 6.5.0
Gulp CLI : [09:06:54] CLI version 3.9.1 [09:06:54] Local version …Run Code Online (Sandbox Code Playgroud) 我想知道文件写完的时间,并且我正在尝试使用FileObserver.我是这样做的:
FileObserver observer = new FileObserver(imageUri.getPath()) {
@Override
public void onEvent(int event, String path) {
if(event == FileObserver.CLOSE_WRITE)
Log.d(TAG, "FILE: "+path);
}
};
observer.startWatching();
Run Code Online (Sandbox Code Playgroud)
imageUri是有效的Uri.文件关闭后,我得到以下日志条目:
FILE: null
Run Code Online (Sandbox Code Playgroud)
为什么null?用户可能会写入多个文件,因此我需要知道哪个文件正在触发事件.
谢谢!
我有一个用于与我的服务器数据的Android应用程序.昨天我注意到,如果我点击设置 - >应用程序 - >我的应用程序,应用程序数据将被删除,但用户帐户不会被删除.这导致我的服务器出现一致性问题,因为突然重新启动用户的数据而没有收到重启消息.AccountssynchronizeClear Data
有没有办法删除Account用户点击的时间Clear Data?或者至少捕获事件以便能够向我的服务器发送消息.
谢谢!
我想要一个Dialog有圆角的东西,但是当Dialog看到它下面有一个矩形,它在角落下面看到,像这样:

我dialog使用自定义构建DialogFragment:
public class MyDialogFragment extends DialogFragment{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.playdialog, null));
return builder.create();
}
}
Run Code Online (Sandbox Code Playgroud)
对话框布局(playdialog)具有以下drawable作为背景:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid
android:color="#AAAAAAAA" />
<stroke
android:width="2dp"
android:color="#FF000000" />
<corners android:radius="20dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
正如我所说,我将此drawable设置为背景:
android:background="@drawable/dialog_background"
Run Code Online (Sandbox Code Playgroud)
我不希望看到那个矩形.我该怎么做??
在这篇文章中,用户遇到了同样的问题.我试图使用适合他的解决方案,但它对我不起作用.我修改了DialogFragment这样的:
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.playdialog, null));
Dialog …Run Code Online (Sandbox Code Playgroud) 我的应用程序可以生成我想要共享的CSV文件.我正在使用MIME类型text/comma_separated_values/csv,但是当我发送Intent选择器时没有显示,我猜我的设备不知道如何处理该文件.我应该使用哪种类型?
这是我的代码:
Uri csv = lh.createDailyCSV();
if(csv == null){
Toast.makeText(this, getString(R.string.error_creating_csv), Toast.LENGTH_LONG).show();
}
else{
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/comma_separated_values/csv");
sharingIntent.setData(csv);
startActivity(Intent.createChooser(sharingIntent, getResources().getText(R.string.send_to)));
}
Run Code Online (Sandbox Code Playgroud)
我在我的清单中宣布:
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/comma_separated_values/csv" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
我得到了例外
03-12 12:19:23.430: E/ActivityThread(24011): Activity com.android.internal.app.ChooserActivity has leaked IntentReceiver com.android.internal.app.ResolverActivity$1@412fc920 that was originally registered here. Are you missing a call to unregisterReceiver()?
Run Code Online (Sandbox Code Playgroud)
我已经读过这个例子,当选择器中没有或只有一个选项时会发生异常.
[编辑]
我改变了将数据附加到Intent的方式.我使用的不是sharingIntent.setData(csv):
sharingIntent.putExtra(Intent.EXTRA_STREAM, csv);
Run Code Online (Sandbox Code Playgroud)
现在选择器工作正常,但如果我尝试通过电子邮件发送文件,我收到一个错误:文件无法显示.
[/编辑]
android ×9
account ×1
angular ×1
bluetooth ×1
clear ×1
csv ×1
custom-view ×1
events ×1
fileobserver ×1
headset ×1
ionic3 ×1
javascript ×1
share ×1